Русский
Русский
English
Статистика
Реклама

Блог компании сбербанк

Где стажировку проходили, там и работайте 4 истории стажёров Сбербанка

10.08.2020 12:13:56 | Автор: admin
image

Это истории тех, кто учится в Школе 21, успешно прошёл стажировку и остался работать в Сбербанке. Я уже рассказывала, что этот проект путь в IT и он крайне эффективен. Если очень коротко мы научились готовить джунов с нуля за год, делая упор на soft skills. Учиться нужно умению мыслить как разработчик от анализа требований до взаимодействия внутри команды. Что, собственно, в Школе 21 и происходит на базе C, где ребята в полубоевых условиях работают над проектами не по учебному материалу, а ищут всю информацию сами. Не все верят, что люди после такой подготовки могут быстро освоить новый язык или фреймворк за время стажировки и начать работать разработчиком.

Могут. Вот истории четырёх участников Школы 21, которые прошли как раз такой путь.

С вузами у меня как-то не сложилось


image

Меня зовут Максим Фролов. Родился в Волжском (маленький городок под Волгоградом). Из образования только 11 классов школы, с вузами у меня как-то не сложилось. Один Школьник написал в чат: Ребят, тут стажировки на разные направления, кому надо?. Я ответил: Можно попробовать, и понеслось.

Все-таки Школа 21 это ресурс для получения знаний самостоятельным путём, значит в теории, самостоятельно копаясь в недрах стаковерфлоу и технической литературе, параллельно выполняя проекты любого рода, можно было бы добиться того же, что я имею сейчас. Но Школа 21 даёт нереальный буст по времени. Почему? Это экосистема, в которой твой досуг сбалансирован так, что при разумном подходе ты успеешь и поиграть в настольный теннис или приставку, и обсудить с друзьями новый киберпанк, но в то же время сделаешь кусок сложного командного проекта, у которого скоро дедлайн, не потеряв при этом мотивацию и не перегорев. С этим обычно есть проблемы у онлайн-курсов. Ты заходишь на Курсеру, потому что понимаешь надо что-нибудь изучить. Приходится контролировать себя самому. В Школу 21 же можно приехать просто так, и нужный досуг сам найдёт тебя.

В Сбере работал в ДИТ Сервисы и безопасность, офис был на Чайке. Про проект сказать не могу, так как NDA. Занимался проектами под WebGL/Android+iOS на Unity. Сейчас компания занимается продуктом Revizto визуальным интегратором для строительного софта (Revit, Navisworks, SketchUp, Tekla и т. д.) Под визуальным интегратором имеется ввиду такой инструмент, в который можно запихнуть наработки из разных отделов и в реальном времени посмотреть как идёт проектирование, где есть пересечения частей зданий и т. д. Я занимаюсь непосредственно этим продуктом, работаю на связке Unity/.NET.

Что было самым важным? В реалиях нынешнего рынка это, наверное, софтскиллы, полученные во время командной работы. И расширение кругозора. В Школе 21 много интересных проектов, которыми можно позаниматься для души, если есть время. Я вот сейчас забрёл в ветку кибербезопасности и пытаюсь что-то делать с низкоуровневыми уязвимостями бинарников. Пригодится ли это мне когда-нибудь? Очень сомневаюсь. Но это как решать задачки для математиков, приносит неописуемое удовольствие:)

Планов как таковых нет. Жизнь штука динамичная. Я не знаю, что будет через месяц. Точно буду продолжать учиться и работать. Возможно, займусь каким-то собственным делом, давно хочу создать бесплатный образовательный ресурс в сфере GameDev, но никак не хватает времени.

Из советов важно не расстраиваться в начале. У всех когда-то не было понимания, как работает Hello World. И не расслабляться, когда уже преодолел порог вхождения. Свои навыки надо постоянно развивать, чтобы быть актуальным на рынке специалистов. Ну и искать ответы на интересующие тебя вопросы в разных источниках. О чём-то может подсказать знакомый, который работает над похожим с тобой проектом, о чём-то лекция на Ютубе, какая-то полезная информация есть на Хабре и Курсере/Степике, о чём-то может быть написано в книге, а что-то ты вынесешь для себя сам во время экспериментов.

Обратите внимание, что Максим говорит про вузы и Курсеру. Каждый в Школе 21 выбирает тот метод, который больше ему подходит: кто-то слушает лекции и читает те же учебники, что дают в вузе, кто-то проходит курсы в интернете, кто-то просто спрашивает всех вокруг и пытается вывести сам закономерности. Многие классические вузы во всех странах подходят к внедрению новых методик: проектная работа, peer-to-peer проверки, кросс-специальности. Но система образования всегда очень консервативна, и все изменения занимают годы, тогда как в Школе 21 мы можем проверить гипотезу, проведя A/B тестирование на одном потоке, и уже в следующем квартале внедрить нововведение. Появился спрос на новый язык или стек технологий уже в этом же году это может стать частью нашей программы.

До Школы 21 почти примирилась с тем фактом, что IT это не моё


image

Меня зовут Орлова Елена, учусь на бакалавриате в НИТУ МИСиС, третий курс, направление Информационные системы и технологии. Работаю в подразделении Государственные продукты и сервисы. Автоматизируем документооборот между банком и государством. Конкретно я занимаюсь разработкой на Java. В одном из проектов дорабатывала задачи из техдолга, в другом изучала и внедряла новую технологию для нашего трайба. В новом проекте буду изучать DevOps. До Школы 21 почти примирилась с тем фактом, что IT это не моё.

Удивил темп решения задач никогда не думала, что могу так быстро разбираться в совершенно новых темах. Также меня удивили люди они находят нестандартные решения, быстро мыслят. Плюс классно, что вместе собраны те, кому 18 и те, кому за 45. Ожидала, что новая методика обучения поможет переосмыслить подход к образованию. Всё оправдалось. Когда тебя не контролируют, не подпинывают и разрешают приходить в любое время, появляется больше желания что-то делать и даже задачи решаются креативнее.

Случай Лены характерен для половины наших участников, она, как и многие, не думала, что IТ это её. Мы вообще довольно часто слышим такое. Они пробуют, смотрят и понимают, что могут стать разработчиками.

Запуская проект, мы понимали, что уровень снобизма на отечественном IТ-рынке высокий и вчерашний лингвист/юрист/экономист/кондитер/музыкант должны будут пройти через первичное недоверие, многочисленные тесты и получить определённую долю отказов.

Звучит очень здорово, но мы не верим, что за год можно стать разработчиком


image

Меня зовут Кирилл Иванов, мне 26 лет, родом я из Вологды, до поступления в Школу 21 я жил в Санкт-Петербурге. У меня высшее образование, закончил я Петербургский государственный университет путей сообщения по специальности Управление ж/д перевозками и логистика на транспорте. Стажировка в Сбербанке у меня закончилась ещё в декабре 2019 года. В мае 2019 года меня и ещё шестерых участников Школы 21, кто был готов к выходу на стажировку, пригласили на спиддейтинг в Сбербанк. С каждым из нас по очереди общались несколько руководителей команд. По сути, это несколько быстрых собеседований в один день. Некоторым из нас предложили устроиться на работу в качестве стажёров. Если честно, то я не уверен, что без Школы 21 у меня вообще был путь в IT.

Сейчас продолжаю работать в той же команде. Ведущий инженер по разработке в розничном блоке, трайбе Забота о клиентах. Команда занимается разработкой платформы мониторинга трайба. Этот продукт нужен для визуализации бизнес, аппликационных и инфраструктурных метрик. Например, сколько звонков поступило в кол-центр, сколько сообщений пользователи написали в чате в Сбербанк Онлайн и многое другое. Администраторам систем необходимо наблюдать за состоянием своей системы, приложений и серверов. Я непосредственно занимаюсь разработкой этой платформы и настройкой интеграций с другими системами. Помню свой первый день, когда пришёл на очную встречу в Школе 21. Я увидел кластеры с iMac на столах, мне рассказали о методике обучения. Первой моей реакцией было: Офигеть, а так можно было???. В этот же день я уволился с работы и сразу же записался на прохождение бассейна. Не было каких-то особых ожиданий от обучения в Школе 21. Это просто было очень весело и интересно. Изначально я не знал, что это так далеко зайдёт, и я буду работать разработчиком в Сбербанке. Иногда я до сих пор думаю об этом.

Когда я искал стажировку, Школе 21 было всего полгода, и никто из компаний о ней не знал. Когда рассказывал о Школе 21, реакция многих была: Звучит очень здорово, но мы не верим, что за полгода можно стать разработчиком. Сейчас же, практически все IT-компании знают о существовании Школы 21, и о том, какие крутые участники в ней учатся. Если ты скажешь, что ты участник Школы 21, то тебя определённо возьмут на стажировку. Ну и, конечно, обучаясь в Школе 21, ты получаешь не только IT-знания, но и навыки, о которых я рассказывал выше.

Планы продолжу работать в IT, хотел бы поработать где-то не в России, и с новыми знаниями вернуться обратно.

В Школе 21 Кириллу дали достаточно много знаний и навыков, что сильно поможет ему в выстраивании дальнейшей карьеры. Предполагаю, что после получения крепких хард и софтскиллов у нас, он поработает где-то в Долине, а потом лет через пять вернётся в Россию. Ну или мы будем читать о нём в Forbes.

Методология помогла мне упорядочить мои разрозненные знания


image

Меня зовут Наталия Талантова, я из города Чебоксары, последние восемь лет живу в Москве. Закончила Чувашский государственный педагогический университет по специальности Связи с общественностью. Моя стажировка уже закончилась, но я осталась работать в том же самом месте. Работаю в Сбербанке, в трайбе ИСУ (Интеллектуальная система управления). У нас разрабатываются несколько продуктов, в совокупности они и образуют интеллектуальную систему управления, позволяющую понять эффективность работы сотрудника. Если его работа не соответствует метрике, то даётся ряд рекомендаций, направленных на то, чтобы устранить отклонение. Я вхожу в команду разработчиков одного из этих продуктов. Основной язык Python, библиотека pandas, также активно работаю с базами данных Oracle, Postgres.

На стажировку попала после одного из собеседований моей подруги, которая также учится в Школе 21. Она дала мне контакты моего текущего руководителя, и после собеседования меня позвали на работу. Да, я получила оффер ещё до окончания стажировки, и вот уже год как я работаю на этом месте.

Методология, которую использует Школа 21, помогла мне упорядочить мои разрозненные знания. До своего первого бассейна я самостоятельно изучала основы, проходила онлайн-курсы. Но у меня нет технического образования, и до Школы 21 я никогда не занималась программированием. В 21, за довольно небольшой промежуток времени, при должной мотивации, получаешь достаточно навыков для начала своей карьеры. Конечно, можно и самому развиваться, но это намного сложнее, да и нет такого мощного стимула, как плотное взаимодействие с другими участниками. Это тоже отличный способ изучать новое и понимать непонятное спросить другого или рассказать самому.

Ожиданий не было. Я из первого потока участников, и поначалу не было почти никакой информации о том, что представляет собой Школа 21, и вообще зачем всё это. Так что я относилась к этому как к небольшой авантюре: будет что-то путное хорошо, а если нет так и терять было особо нечего.

На работе используешь довольно узкий круг технологий. Решение школьных проектов позволяет оставаться в тонусе. Тем более планируются новые проекты на Python, а это прекрасная возможность подтянуть свои знания в языке и улучшить навык написания кода. Кроме обучения Школа 21 предлагает ещё массу других активностей. Например, лекции и вебинары, языковые и музыкальные клубы, спортивные секции и многое другое. Многие мероприятия организуют сами участники. Ну и просто интересно увидеть, что будет дальше.

Скорее всего, моя дальнейшая карьера уже не будет зависеть от того, когда я завершу обучение. К этому моменту у меня уже будет некий опыт работы, который позволит мне себя чувствовать увереннее. Планирую и дальше развиваться в разработке, углублять свои знания. Вершин для покорения тут множеств, скучно точно не будет.

Звучит, наверное, банально, но планирование карьеры в IT я бы начала с выработки стратегии. IT-сфера огромная, стоит понять, какая область вызывает наибольший интерес. Дальше узнать какие компетенции необходимо развивать. И, конечно, определить каким образом получить новые навыки сегодня есть масса образовательных возможностей. Это очень общая схема, но для меня стала рабочей.

Наталия PR-специалист по образованию, который применяет математический подход к планированию своей карьеры. Не думаю, что айтишники по образованию понимали на первом курсе, куда именно они идут и что конкретно будут делать и спланировали свою карьеру как продукт.

В результате


Истории участников Школы 21 очень разные. Мы знаем всё обо всех наших участниках и остаёмся с ними на связи даже во время прохождения стажировки, поэтому точно можем сказать кажется, мы нащупали именно ту образовательную инициативу, которой очень не хватает совершенно разным поколениям. Кому-то может показаться, что мы жестоки в плане отсева, непохожи на привычные вещи, вызываем вал критики и недопонимания но теперь нам не нужно никого убеждать предположениями, как в первый год. Теперь есть численные результаты: из 200 первых участников, которые вышли на стажировку, только двое не получили предложения о работе по окончании.
Подробнее..

Можно ли воссоздать полную нейросеть мыши из тонких послойных разрезов мозга?

17.09.2020 10:15:44 | Автор: admin
image
Карликовая многозубка, самое маленькое млекопитающее по массе. Внутри маленький целостный сложный мозг, который уже принципиально можно картировать

Короткий ответ можно, но не полную и не очень точную. То есть мы ещё не можем скопировать её сознание, но приблизились к этому как никогда. Проживите ещё лет двадцать и, возможно, ваш мозг тоже получится забэкапить.

Чтобы приблизиться к оцифровке сознания и такому экзотическому виду бессмертия, стоит сначала разобраться с живыми нейронными сетями. Их реверс-инжиниринг показывает нам, как вообще может быть устроен процесс мышления (вычислений) в хорошо оптимизированных системах.

60 лет назад, 13 сентября 1960 года, учёные собрали первый симпозиум из биологов и инженеров, чтобы они могли разобраться, в чём же разница между сложной машиной и организмом. И есть ли она вообще. Науку назвали бионикой, а целью обозначили применение методов биологических систем к прикладной инженерии и новым технологиям. Биосистемы рассматривались как высокоэффективные прототипы новой техники.

Военный нейроанатом Джек Стил стал одним из людей, заметно повлиявших на дальнейший прогресс в области технологий, в том числе в области ИИ, где развитие получили такие направления, как нейроморфная инженерия и биоинспирированные вычисления. Стил был медиком, разбирался в психиатрии, увлекался архитектурой, умел управлять самолётом и сам чинил свою технику, то есть был вполне неплохим прикладным инженером. Научная работа Стила стала прообразом сценария фильма Киборг. Так что с некоторой натяжкой можно назвать его прадедушкой Терминатора. А где Терминатор, там и Скайнет, как известно.

Этот пост написан на основе материалов будущей книги нашего коллеги Сергея Маркова Охота на электроовец: большая книга искусственного интеллекта.

Вообще вопрос соотношения физиологических процессов, происходящих в нервной системе человека, и психических явлений один из самых интригующих вопросов современной науки. Представьте себе, что в ваши руки попал секретный компьютерный процессор и вы хотите его скопировать. Вы можете нарезать его тонкими слоями и скрупулёзно скопировать его слой за слоем. Но насколько точная копия вам нужна, чтобы она была полностью или хотя бы частично функциональной? Без экспериментов дать ответ на такой вопрос крайне сложно.

Бионика, или биомиметика, копировала принципы биосистем или брала их за основу. Как Леонардо да Винчи смотрел за полётом птиц и изобретал орнитоптер (к сожалению, подходящих материалов и источников энергии тогда не нашлось), так и мы в двадцатом веке копировали всё более сложные системы. RFID-чипы, медицинские адгезивы (клеи), гидрофобные структуры, наносенсоры всё это и многое другое создавалось по биопрототипам. Где-то само наличие прототипа в природе позволяло понять, что технология в принципе возможна. Если растения способны синтезировать сахара и крахмал из углекислого газа и воды, значит можно создать устройство, выполняющее ту же функцию.

И если эволюция оптимизирует системы в сторону приспособленности к среде, то мы могли оптимизировать их под наши задачи. С точки зрения эволюции человеческий мозг должен потреблять мало энергии, должен быть устойчивым к физическим воздействиям (вряд ли вам понравится, если от падения яблока на голову вы будете полностью терять память), голова младенца должна беспрепятственно преодолевать родовые пути при рождении и так далее.

В случае разработки устройства, использующего те же принципы, у нас нет этих ограничений. Как и сотен других.

Кстати, наши предки часто придерживались терминальной теории мышления, предполагая, что процессы проходят где-то удалённо (в душе) и транслируются в виде команд через какой-то орган. Аристотель с коллегами считал, что терминал души находится в сердце. Но опыты древних врачей были ограничены техническим уровнем цивилизации. Так продолжалось примерно до того, как Луиджи Гальвани в 1791 году обнаружил, что ток заставляет мышцы сокращаться. Эти опыты дали начало исследованиям в области биоэлектрических явлений. В какой-то момент Катон решил замерить потенциалы всего вокруг и начал открывать для своих измерений животных. Он обнаружил, что внешняя поверхность серого вещества была заряжена более положительно, чем глубокие структуры мозга. Он также отметил, что электрические токи головного мозга, по-видимому, имеют отношение к основной функции. Когда я показал обезьяне изюм, но не дал его, произошло небольшое уменьшение силы тока. Благодаря ему же родилась неинвазивная (то есть не связанная с проникновением через внешние барьеры организма) электроэнцефалография. В 1890 году физиолог Адольф Бек из Польши обнаружил низковольтные высокочастотные колебания электрических потенциалов, возникающие между двумя электродами, помещёнными в затылочную кору мозга кролика.

В этот момент многим учёным стало понятно, что мозг это принципиально познаваемая вещь. Возможно, это даже не терминал для божественной души, а вполне понятная электрическая машина, но только очень сложная. Либо же содержит такой инженерный компонент, и его можно изучить. Катон создал предпосылки для последующего появления ЭЭГ. Современную электроэнцефалографию создал Бергер, хотя у него и были предшественники типа Правдича-Неминского и прочих.

За два года до экспериментов Катона, в 1873 году, был открыт метод Гольджи (названный так в честь его автора итальянского физиолога Камилло Гольджи), позволяющий окрашивать отдельные нейроны (правда, слово нейрон не использовалось до 1891 года).

До открытия Гольджи в биологии была популярна концепция, предложенная немецким гистологом Йозефом фон Герлахом, который считал, что волокна, выходящие из различных клеточных тел, соединены в единую сеть, получившую название ретикулум. Популярность идей Герлаха была связана с тем, что, в отличие от сердца или печени, мозг и нервную систему не получалось разделить на отдельные структурные единицы: хотя нервные клетки были описаны в составе ткани многими исследователями того времени, связь между нервными клетками и связывающими их аксонами и дендритами была неясной. Главной причиной этого были недостатки микроскопии. Благодаря своему открытию, Гольджи увидел, что разветвлённые отростки одного клеточного тела не сливаются с другими. Он, однако, не стал отбрасывать концепцию Герлаха, предположив, что длинные тонкие отростки, вероятно, соединены в одну непрерывную сеть.

Это было похоже на то, что уже знали механики и электрики. Механистический подход торжествовал. Правда, всё ещё было решительно непонятно, как же это работает. Или хотя бы как может работать.

Четырнадцать лет спустя, в 1887 году, испанский нейроанатом Сантьяго Рамон-и-Кахаль доказал, что длинные тонкие отростки, выходящие из тел клеток, вовсе не связаны в единую сеть. Нервная система, как и все другие живые ткани, состояла из отдельных элементов. В 1906 году Рамон-и-Кахаль и Камилло Гольджи за труды по строению нервной системы получили Нобелевскую премию в области физиологии и медицины. Зарисовки Рамон-и-Кахаля, из которых до наших дней дошло около 3 000, и сегодня остаются одними из самых подробных описаний структурного разнообразия мозга и нервной системы.

image
Автор зарисовки Сантьяго Рамон-и-Кахаль (Santiago Ramon y Cajal)

Дальнейшие исследования всё детальнее показывали, что мы можем принципиально разобраться в том, как мы мыслим на инженерном уровне. А, значит, можем и заняться прикладной биомиметикой.

image

Хотя ещё со времён Гальвани было известно, что нервы могут быть возбуждены электрически, однако стимулы, используемые для возбуждения нервов, было довольно трудно контролировать. Какой силы и продолжительности должен быть сигнал? И как связь между стимулом и возбудимостью может быть объяснена за счёт подлежащей биофизики? Этими вопросами задались на границе XIX и XX веков пионеры в области изучения нервной возбудимости Ян Хорвег (Jan Leendert Hoorweg, 18411919, иногда неточно передаётся как Гоорвег), Жорж Вейс (Jules Adolphe Georges Weiss, 18511931) и Луи Лапик (Louis Lapicque, 18661952). В своём первом исследовании 1907 года Лапик представляет модель нерва, которую он сравнивает с данными, полученными при стимуляции нерва лягушки. Эта модель, основанная на простой конденсаторной схеме, послужит основой для будущих моделей клеточной мембраны нейрона.

Просто, чтобы вы понимали сложности науки в те годы, стоит привести пару примеров. Стимулом, который использовал Лапик, был короткий электрический импульс, который подавался через два электрода, разработанных и изготовленных специально для этой цели. В идеале в экспериментах по стимуляции можно было бы использовать импульсы тока, но подходящие источники тока создать было непросто. Вместо этого Лапик использовал источник напряжения батарею. Регулировка напряжения осуществлялась при помощи делителя напряжения, представлявшего собой длинный провод с ползунком, похожий на современный потенциометр. Получить точные импульсы длительностью всего несколько миллисекунд тоже было непросто, изобретённый несколько ранее инструмент для этого был назван реотомом. Устройство состояло из пистолета с капсюльным замком, пуля которого сначала разрывала первую перемычку, создавая ток в стимулирующей цепи, затем разрывала на своём пути вторую перемычку, прерывая контакт.

Работа 1907 года привела Лапика к ряду теоретических рассуждений. Он постулировал, что активация цепочки нервных клеток зависит от последовательной электрической стимуляции каждой клетки импульсом или потенциалом действия предыдущей. Лапик предложил теорию нервных процессов, которая напоминала подстройку или резонанс между колебательными радиоконтурами.

В 1943 году увидела свет книга Лапика La machine nerveuse [Нервная машина], подводящая итог многолетних исследований учёного.

image
Издательство Paris: Maison parisienne Neurdein (ND. Phot.), s.d.

Нередко в рассуждениях о результатах работы Лапика для вычислительной нейробиологии можно столкнуться с утверждением о том, что Лапик является создателем и исследователем первой модели нейрона, носящей название интегрировать-и-сработать [integrate-and-fire]. В соответствии с этой моделью, алгоритм работы нейрона можно описать следующим образом: когда на вход нейрона подаётся ток, разность потенциалов (напряжение) на мембране возрастает со временем, пока не достигает некоторого порогового значения, при котором происходит скачкообразное изменение потенциала на выходе, напряжение сбрасывается до остаточного потенциала, после чего процесс может повторяться снова и снова. В действительности связь между возбуждением нерва и образованием нервного импульса во времена Лапика была ещё неясной, и учёный не выдвигает гипотез ни об этом, ни о том, как мембрана возвращается в исходное состояние после выдачи импульса.

Дальнейшее развитие идей Лапика в рамках вычислительной нейробиологии привело к появлению множества более точных и полных моделей биологического нейрона. В их числе модели интегрировать-и-сработать с утечками [leaky integrate-and-fire], интегрировать-и-сработать с утечками дробного порядка [fractional-order leaky integrate-and-fire], модель Гальвеса Лёкербаха [GalvesLocherbach model], экспоненциальный вариант модели интегрировать-и-сработать [exponential integrate-and-fire] и многие другие. Нобелевская премия 1963 года была выдана за исследования сэра Алана Ллойда Ходжкина (Sir Alan Lloyd Hodgkin, 19141998) и сэра Эндрю Филдинга Хаксли (Sir Andrew Fielding Huxley, 19172012, не путайте с писателем).

image
Источник

Долгопёрый прибрежный кальмар (Doryteuthis pealeii), как и другие кальмары, является чрезвычайно удобным для нейрофизиологов модельным организмом благодаря наличию у него гигантских аксонов. Гигантский аксон кальмаров это очень большой (обычно около 0,5 мм в диаметре, но иногда достигает 1,5 мм) аксон, который контролирует часть водореактивной системы кальмара, используемой им в основном для коротких, но очень быстрых перемещений в воде. Между щупальцами кальмара расположен сифон, через который вода может быстро выталкиваться за счёт сокращений мышц стенки тела животного. Это сокращение инициируется потенциалами действия в гигантском аксоне. Поскольку электрическое сопротивление обратно пропорционально площади поперечного сечения объекта, потенциалы действия распространяются быстрее в большем аксоне, чем в меньшем. Поэтому увеличение диаметра гигантского аксона поддерживалось в процессе эволюции, так как позволяло увеличить скорость мышечной реакции. Это стало настоящим подарком для Ходжкина и Хаксли, которых интересовал ионный механизм потенциалов действия ведь благодаря большому диаметру аксона, в его просвет можно было невозбранно установить зажимные электроды!

image
Источник

Модель Ходжкина Хаксли представляет собой систему нелинейных дифференциальных уравнений, которая приближённо описывает электрические характеристики возбуждаемых клеток. Следствием стала модель, которая послужила основой для более детальных исследований, это был главный прорыв нейрофизиологии двадцатого века.

Один из наиболее интересных проектов осуществляется учёными из лаборатории Себастьяна Сеунга. Ближайшей целью проекта стало создание карты связей нейронов сетчатки мышонка по имени Гарольд. Сетчатка была выбрана в качестве модельного объекта для обкатки технологий, необходимых для достижения долгосрочной научной цели, полного описания коннектома мозга человека. Мышиный мозг был извлечён из черепной коробки и нарезан на тонкие слои.

Полученные срезы были пропущены через электронный микроскоп. Когда сотрудники лаборатории осознали, что воссоздание карты связей одного единственного нейрона требует около пятидесяти часов рабочего времени специалиста и картирование сетчатки мыши у группы из ста учёных займёт почти двести лет, стало ясно, что необходимо принципиально иное решение. И оно было найдено. Им стало создание онлайн-игры EyeWire, в которой игроки соревнуются друг с другом в деле окраски фотографий срезов мышиного мозга.

В 2014 году, через два года после запуска EyeWire, сотрудники лаборатории сделали первое открытие и рассказали о нём в журнале Nature. Учёным удалось выяснить, как именно млекопитающие распознают движение. Когда свет попадает на клетки фоторецепторов, они передают сигнал биполярным клеткам, затем амакриновым и, наконец, ганглионарным. Учёные проанализировали 80 звёздчатых амакриновых нейронов (29 из них помогли описать игроки EyeWire) и соединённые с ними биполярные клетки. Они заметили, что разные типы биполярных клеток по-разному соединяются с амакриновыми нейронами: биполярные клетки одного типа располагаются далеко от сомы (тела) звёздчатой клетки и передают сигнал быстро, клетки другого типа располагаются близко, но сигнал передают с задержкой.

Если стимул в поле зрения удаляется от тела (сомы) звёздчатой амакриновой клетки, то первой активизируется медленная биполярная клетка, затем быстрая. Тогда, несмотря на задержку, сигналы клеток обоих типов достигают звёздчатого амакринового нейрона одновременно, он испускает сильный сигнал и передаёт его дальше ганглионарным клеткам. Если же стимул движется по направлению к соме, сигналы разных типов биполярных нейронов не встречаются и сигнал амакриновой клетки получается слабым.

Размеченные игроками данные были использованы для того, чтобы обучить на них соответствующие модели машинного обучения, которые затем смогут выполнять раскраску самостоятельно. Своеобразная ирония заключается в том, что в основе этих моделей лежат свёрточные нейронные сети (о них мы поговорим подробно несколько позже), созданные, в свою очередь, под влиянием научных данных, полученных в ходе изучения зрительной коры головного мозга.

2 апреля 2013 года началась программа BRAIN Initiative. Первым кирпичиком в фундаменте стала статья Пола Аливизатоса, в которой были изложены экспериментальные планы для более скромного проекта, в том числе рассмотрены методы, которые могут быть использованы для построения функционального коннектома, а также перечислены технологии, которые необходимо будет разработать в ходе проекта. От червей и мух планировалось перейти к более крупным биосистемам, в частности, карликовой многозубке. Это самое маленькое по массе тела из известных науке млекопитающих, а её мозг состоит из всего примерно миллиона нейронов. От землероек можно будет перейти к приматам, в том числе на последнем этапе к людям.

Первый коннектом живого существа, а именно нематоды C. elegans, был построен в далёком 1986 году группой исследователей во главе с биологом Сидни Бреннером (Sydney Brenner, 19272019) из Кембриджа. Бреннер и его коллеги аккуратно нарезали миллиметровых червей на тонкие ломтики и сфотографировали каждый срез с помощью плёночной камеры, установленной на электронном микроскопе, а затем по полученным снимкам вручную проследили все связи между нейронами. Однако у C. elegans всего 302 нейрона и около 7 600 синапсов. В 2016 году команда учёных из Университета Дэлхаузи в Канаде повторили подвиг своих коллег для личинки морского оболочника Ciona intestinalis, центральная нервная система которого, как выяснилось, состояла из 177 нейронов и 6 618 синаптических соединений. Однако надо заметить, что методы, используемые для построения коннектома, неэффективны для крупных нервных систем. Исследователи не задумывались всерьёз о том, чтобы приступить к осуществлению значительно более крупных проектов до 2004 года, когда физик Винфрид Денк и нейроанатом Хайнц Хорстманн предложили использовать автоматический микроскоп для разрезания и визуализации мозга, а также программное обеспечение для сбора и соединения результирующих изображений.

В 2019 году в журнале Nature появилась публикация доктора Скотта Эммонса с подробным отчётом о воссоздании коннектома нематоды Caenorhabditis elegans при помощи нового метода. Годом раньше группа учёных под руководством Чжихао Чжэна (Zhihao Zheng) из Принстонского университета завершила работу над сканированием мозга дрозофилы, состоящего из примерно 100 тысяч нейронов. Система, разработанная Чжэном и его коллегами, позволила пропустить через просвечивающий растровый электронный микроскоп более 7 000 тончайших срезов мозга мушки, толщина каждого из которых составляла порядка 40 нм, а суммарный размер полученных в результате изображений составил 40 триллионов пикселей.

В апреле 2019 года сотрудники Института головного мозга им. Аллена в Сиэтле отпраздновали преодоление последнего рубежа в проекте по картированию одного кубического миллиметра мозга мыши с его 100 000 нейронов и одним миллиардом связей между ними. Чтобы обработать образец размером с горчичное зёрнышко, микроскопы работали непрерывно в течение пяти месяцев, собрав более 100 миллионов изображений 25 000 срезов зрительной коры. Затем программному обеспечению, разработанному учёными института, потребовалось около трёх месяцев, чтобы объединить изображения в единый трёхмерный массив объёмом 2 петабайта. Все собранные более чем за 30 лет миссиями Landsat снимки нашей планеты занимают всего около 1,3 петабайта, что делает сканы мозга мыши практически целым миром в песчинке. Конечная цель наноразмерный коннектом человеческого мозга пока ещё далеко. Число нейронов в нём сопоставимо с количеством звёзд в Млечном Пути (порядка 1011). При использовании современной технологии обработки изображений потребуются десятки микроскопов, работающих круглосуточно на протяжении тысячи лет, чтобы собрать данные, необходимые для достижения конечной цели. Но достижения в области микроскопии, а также разработка более мощных компьютеров и алгоритмов для анализа изображений, продвинули область коннектомики вперёд столь быстро, что это удивляет и самих исследователей. Пять лет назад было слишком амбициозно думать о кубическом миллиметре, говорит Рэйд. Сегодня многие исследователи считают, что полное картирование мозга мыши, объём которого составляет около 500 кубических миллиметров, станет возможным в следующем десятилетии. Сегодня картирование человеческого мозга на синаптическом уровне может показаться невероятным. Но если прогресс будет идти вперёд теми же темпами, как в вычислительных мощностях, так и в научных методах, ещё одно тысячекратное увеличение возможностей уже не кажется нам немыслимым.

image

BRAIN Initiative не единственная масштабная программа в этой области. Созданием функциональной модели мозга крысы (с прицелом на мозг человека) заняты и учёные из проектов Blue Brain Project и Human Brain Project. Не стоит на месте и China Brain Project.

Собственно, теперь, когда вы понимаете сложность этих биологических прототипов, можно переходить к инженерному подходу и постепенно начать обсуждать применение принципов в современных вычислениях. Но об этом в следующий раз. Или куда как более детально эта часть и следующие в книге Сергея Маркова Охота на электроовец: большая книга искусственного интеллекта, которая готовится к публикации издательством Альпина нон-фикшн. Пока книгу купить ещё нельзя, а вот посты по материалам уже читать можно. Ну и вообще oulenspiegel очень крутой специалист.
Подробнее..

Когда у вас сберовские масштабы. Использование Ab Initio при работе с Hive и GreenPlum

07.07.2020 18:11:11 | Автор: admin
Некоторое время назад перед нами встал вопрос выбора ETL-средства для работы с BigData. Ранее использовавшееся решение Informatica BDM не устраивало нас из-за ограниченной функциональности. Её использование свелось к фреймворку по запуску команд spark-submit. На рынке имелось не так много аналогов, в принципе способных работать с тем объёмом данных, с которым мы имеем дело каждый день. В итоге мы выбрали Ab Initio. В ходе пилотных демонстраций продукт показал очень высокую скорость обработки данных. Информации об Ab Initio на русском языке почти нет, поэтому мы решили рассказать о своём опыте на Хабре.

Ab Initio обладает множеством классических и необычных трансформаций, код которых может быть расширен с помощью собственного языка PDL. Для мелкого бизнеса такой мощный инструмент, вероятно, будет избыточным, и большинство его возможностей могут оказаться дорогими и невостребованными. Но если ваши масштабы приближаются к сберовским, то вам Ab Initio может быть интересен.

Он помогает бизнесу глобально копить знания и развивать экосистему, а разработчику прокачивать свои навыки в ETL, подтягивать знания в shell, предоставляет возможность освоения языка PDL, даёт визуальную картину процессов загрузки, упрощает разработку благодаря обилию функциональных компонентов.

В посте я расскажу о возможностях Ab Initio и приведу сравнительные характеристики по его работе с Hive и GreenPlum.

  • Описание фреймворка MDW и работ по его донастройке под GreenPlum
  • Сравнительные характеристики производительности Ab Initio по работе с Hive и GreenPlum
  • Работа Ab Initio с GreenPlum в режиме Near Real Time


Функционал этого продукта очень широк и требует немало времени на своё изучение. Однако, при должных навыках работы и правильных настройках производительности результаты обработки данных получаются весьма впечатляющие. Использование Ab Initio для разработчика может дать ему интересный опыт. Это новый взгляд на ETL-разработку, гибрид между визуальной средой и разработкой загрузок на скрипто-подобном языке.
Бизнес развивает свои экосистемы и этот инструмент оказывается ему как никогда кстати. С помощью Ab Initio можно копить знания о текущем бизнесе и использовать эти знания для расширения старых и открытия новых бизнесов. Альтернативами Ab Initio можно назвать из визуальных сред разработки Informatica BDM и из невизуальных сред Apache Spark.

Описание Ab Initio


Ab Initio, как и другие ETL-средства, представляет собой набор продуктов.

Ab Initio GDE (Graphical Development Environment) это среда для разработчика, в которой он настраивает трансформации данных и соединяет их потоками данных в виде стрелочек. При этом такой набор трансформаций называется графом:

Входные и выходные соединения функциональных компонентов являются портами и содержат поля, вычисленные внутри преобразований. Несколько графов, соединённых потоками в виде стрелочек в порядке их выполнения называются планом.
Имеется несколько сотен функциональных компонентов, что очень много. Многие из них узкоспециализированные. Возможности классических трансформаций в Ab Initio шире, чем в других ETL-средствах. Например, Join имеет несколько выходов. Помимо результата соединения датасетов можно получить на выходе записи входных датасетов, по ключам которых не удалось соединиться. Также можно получить rejects, errors и лог работы трансформации, который можно в этом же графе прочитать как текстовый файл и обработать другими трансформациями:

Или, например, можно материализовать приёмник данных в виде таблицы и в этом же графе считать из него данные.
Есть оригинальные трансформации. Например, трансформация Scan имеет функционал, как у аналитических функций. Есть трансформации с говорящими названиями: Create Data, Read Excel, Normalize, Sort within Groups, Run Program, Run SQL, Join with DB и др. Графы могут использовать параметры времени выполнения, в том числе возможна передача параметров из операционной системы или в операционную систему. Файлы с готовым набором передаваемых графу параметров называются parameter sets (psets).
Как и полагается, Ab Initio GDE имеет свой репозиторий, именуемый EME (Enterprise Meta Environment). Разработчики имеют возможность работать с локальными версиями кода и делать check in своих разработок в центральный репозиторий.
Имеется возможность во время выполнения или после выполнения графа кликнуть по любому соединяющему трансформации потоку и посмотреть на данные, прошедшие между этими трансформациями:

Также есть возможность кликнуть по любому потоку и посмотреть tracking details в сколько параллелей работала трансформация, сколько строк и байт в какой из параллелей загрузилось:

Есть возможность разбить выполнение графа на фазы и пометить, что одни трансформации нужно выполнять первым делом (в нулевой фазе), следующие в первой фазе, следующие во второй фазе и т.д.
У каждой трансформации можно выбрать так называемый layout (где она будет выполняться): без параллелей или в параллельных потоках, число которых можно задать. При этом временные файлы, которые создаёт Ab Initio при работе трансформаций, можно размещать как в файловой системе сервера, так и в HDFS.
В каждой трансформации на базе шаблона по умолчанию можно создать свой скрипт на языке PDL, который немного напоминает shell.
С помощью языка PDL вы можете расширять функционал трансформаций и, в частности, вы можете динамически (во время выполнения) генерировать произвольные фрагменты кода в зависимости от параметров времени выполнения.
Также в Ab Initio хорошо развита интеграция с ОС через shell. Конкретно в Сбербанке используется linux ksh. Можно обмениваться с shell переменными и использовать их в качестве параметров графов. Можно из shell вызывать выполнение графов Ab Initio и администрировать Ab Initio.
Помимо Ab Initio GDE в поставку входит много других продуктов. Есть своя Co>Operation System с претензией называться операционной системой. Есть Control>Center, в котором можно ставить на расписание и мониторить потоки загрузки. Есть продукты для осуществления разработки на более примитивном уровне, чем позволяет Ab Initio GDE.

Описание фреймворка MDW и работ по его донастройке под GreenPlum


Вместе со своими продуктами вендор поставляет продукт MDW (Metadata Driven Warehouse), который представляет собой конфигуратор графов, предназначенный для помощи в типичных задачах по наполнению хранилищ данных или data vaults.
Он содержит пользовательские (специфичные для проекта) парсеры метаданных и готовые генераторы кода из коробки.

На входе MDW получает модель данных, конфигурационный файл по настройке соединения с базой данных (Oracle, Teradata или Hive) и некоторые другие настройки. Специфическая для проекта часть, например, разворачивает модель в базе данных. Коробочная часть продукта генерирует графы и настроечные файлы к ним по загрузке данных в таблицы модели. При этом создаются графы (и psets) для нескольких режимов инициализирующей и инкрементальной работы по обновлению сущностей.
В случаях Hive и RDBMS генерируются различающиеся графы по инициализирующему и инкрементальному обновлению данных.
В случае Hive поступившие данные дельты соединяется посредством Ab Initio Join с данными, которые были в таблице до обновления. Загрузчики данных в MDW (как в Hive, так и в RDBMS) не только вставляют новые данные из дельты, но и закрывают периоды актуальности данных, по первичным ключам которых поступила дельта. Кроме того, приходится переписать заново неизменившуюся часть данных. Но так приходится делать, поскольку в Hive нет операций delete или update.

В случае же RDBMS графы по инкрементальному обновлению данных выглядят более оптимально, потому что RDBMS имеют реальные возможности обновления.

Поступившая дельта загружается в промежуточную таблицу в базу данных. После этого происходит соединение дельты с данными, которые были в таблице до обновления. И делается это силами SQL посредством сгенерированного SQL-запроса. Далее с помощью SQL-команд delete+insert в целевую таблицу происходит вставка новых данных из дельты и закрытие периодов актуальности данных, по первичным ключам которых поступила дельта. Неизменившиеся данные переписывать нет нужды.
Таким образом, мы пришли к выводу, что в случае Hive MDW должен пойти на переписывание всей таблицы, потому что Hive не имеет функции обновления. И ничего лучше полного переписывания данных при обновлении не придумано. В случае же RDBMS, наоборот, создатели продукта сочли нужным доверить соединение и обновление таблиц использованию SQL.
Для проекта в Сбербанке мы создали новую многократно используемую реализацию загрузчика базы данных для GreenPlum. Сделано это было на основе версии, которую MDW генерирует для Teradata. Именно Teradata, а не Oracle подошла для этого лучше и ближе всего, т.к. тоже является MPP-системой. Способы работы, а также синтаксис Teradata и GreenPlum оказались близки.
Примеры критичных для MDW различий между разными RDBMS таковы. В GreenPlum в отличии от Teradata при создании таблиц нужно писать клаузу
distributed by

В Teradata пишут
delete <table> all

, а в GreеnPlum пишут
delete from <table>

В Oracle в целях оптимизации пишут
delete from t where rowid in (<соединение t с дельтой>)

, а в Teradata и GreenPlum пишут
delete from t where exists (select * from delta where delta.pk=t.pk)

Ещё отметим, что для работы Ab Initio с GreenPlum потребовалось установить клиент GreenPlum на все ноды кластера Ab Initio. Это потому, что мы подключились к GreenPlum одновременно со всех узлов нашего кластера. А для того, чтобы чтение из GreenPlum было параллельным и каждый параллельный поток Ab Initio читал свою порцию данных из GreenPlum, пришлось в секцию where SQL-запросов поместить понимаемую Ab Initio конструкцию
where ABLOCAL()

и определить значение этой конструкции, указав читающей из БД трансформации параметр
ablocal_expr=string_concat("mod(t.", string_filter_out("{$TABLE_KEY}","{}"), ",", (decimal(3))(number_of_partitions()),")=", (decimal(3))(this_partition()))

, которая компилируется в что-то типа
mod(sk,10)=3

, т.е. приходится подсказывать GreenPlum явный фильтр для каждой партиции. Для других баз данных (Teradata, Oracle) Ab Initio может выполнить это распараллеливание автоматически.

Сравнительные характеристики производительности Ab Initio по работе с Hive и GreenPlum


В Сбербанке был проведён эксперимент по сравнению производительности сгенерированных MDW графов применительно к Hive и применительно к GreenPlum. В рамках эксперимента в случае Hive имелось 5 нод на том же кластере, что и Ab Initio, а в случае GreenPlum имелось 4 ноды на отдельном кластере. Т.е. Hive имел некоторое преимущество над GreenPlum по железу.
Было рассмотрено две пары графов, выполняющих одну и ту же задачу обновления данных в Hive и в GreenPlum. При этом запускали графы, сгенерированные конфигуратором MDW:

  • инициализирующая загрузка + инкрементальная загрузка случайно сгенерированных данных в таблицу Hive
  • инициализирующая загрузка + инкрементальная загрузка случайно сгенерированных данных в такую же таблицу GreenPlum

В обоих случаях (Hive и GreenPlum) запускали загрузки в 10 параллельных потоков на одном и том же кластере Ab Initio. Промежуточные данные для расчётов Ab Initio сохранял в HDFS (в терминах Ab Initio был использован MFS layout using HDFS). Одна строка случайно сгенерированных данных занимала в обоих случаях по 200 байт.
Результат получился такой:

Hive:
Инициализирующая загрузка в Hive
Вставлено строк 6 000 000 60 000 000 600 000 000
Продолжительность инициализирующей
загрузки в секундах
41 203 1 601
Инкрементальная загрузка в Hive
Количество строк, имевшихся в
целевой таблице на начало эксперимента
6 000 000 60 000 000 600 000 000
Количество строк дельты, применённых к
целевой таблице в ходе эксперимента
6 000 000 6 000 000 6 000 000
Продолжительность инкрементальной
загрузки в секундах
88 299 2 541

GreenPlum:
Инициализирующая загрузка в GreenPlum
Вставлено строк 6 000 000 60 000 000 600 000 000
Продолжительность инициализирующей
загрузки в секундах
72 360 3 631
Инкрементальная загрузка в GreenPlum
Количество строк, имевшихся в
целевой таблице на начало эксперимента
6 000 000 60 000 000 600 000 000
Количество строк дельты, применённых к
целевой таблице в ходе эксперимента
6 000 000 6 000 000 6 000 000
Продолжительность инкрементальной
загрузки в секундах
159 199 321

Видим, что скорость инициализирующей загрузки как в Hive, так и в GreenPlum линейно зависит от объёма данных и по причинам лучшего железа она несколько быстрее для Hive, чем для GreenPlum.
Инкрементальная загрузка в Hive также линейно зависит от объёма имеющихся в целевой таблице ранее загруженных данных и проходит достаточно медленно с ростом объёма. Вызвано это необходимостью перезаписывать целевую таблицу полностью. Это означает, что применение маленьких изменений к огромным таблицам не очень хороший вариант использования для Hive.
Инкрементальная же загрузка в GreenPlum слабо зависит от объёма имеющихся в целевой таблице ранее загруженных данных и проходит достаточно быстро. Получилось это благодаря SQL Joins и архитектуре GreenPlum, допускающей операцию delete.

Итак, GreenPlum вливает дельту методом delete+insert, а в Hive нету операций delete либо update, поэтому весь массив данных при инкрементальном обновлении были вынуждены переписывать целиком. Наиболее показательно сравнение выделенных жирным ячеек, так как оно соответствует наиболее частому варианту эксплуатации ресурсоёмких загрузок. Видим, что GreenPlum выиграл у Hive в этом тесте в 8 раз.

Работа Ab Initio с GreenPlum в режиме Near Real Time


В этом эксперименте проверим возможность Ab Initio производить обновление таблицы GreenPlum случайно формируемыми порциями данных в режиме, близком к реальному времени. Рассмотрим таблицу GreenPlum dev42_1_db_usl.TESTING_SUBJ_org_finval, с которой будет вестись работа.
Будем использовать три графа Ab Initio по работе с ней:

1) Граф Create_test_data.mp создаёт в 10 параллельных потоков файлы с данными в HDFS на 6 000 000 строк. Данные случайные, структура их организована для вставки в нашу таблицу



2) Граф mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset сгенерированный MDW граф по инициализирующей вставке данных в нашу таблицу в 10 параллельных потоков (используются тестовые данные, сгенерированные графом (1))


3) Граф mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset сгенерированный MDW граф по инкрементальному обновлению нашей таблицы в 10 параллельных потоков с использованием порции свежих поступивших данных (дельты), сгенерированных графом (1)


Выполним нижеприведённый сценарий в режиме NRT:

  • сгенерировать 6 000 000 тестовых строк
  • произвести инициализирующую загрузку вставить 6 000 000 тестовых строк в пустую таблицу
  • повторить 5 раз инкрементальную загрузку
    • сгенерировать 6 000 000 тестовых строк
    • произвести инкрементальную вставку 6 000 000 тестовых строк в таблицу (при этом старым данным проставляется время истечения актуальности valid_to_ts и вставляются более свежие данные с тем же первичным ключом)

Такой сценарий эмулирует режим реальной работы некой бизнес-системы в режиме реального времени появляется достаточно объёмная порция новых данных и тут же вливается в GreenPlum.

Теперь посмотрим лог работы сценария:
Start Create_test_data.input.pset at 2020-06-04 11:49:11
Finish Create_test_data.input.pset at 2020-06-04 11:49:37
Start mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:49:37
Finish mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:50:42
Start Create_test_data.input.pset at 2020-06-04 11:50:42
Finish Create_test_data.input.pset at 2020-06-04 11:51:06
Start mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:51:06
Finish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:53:41
Start Create_test_data.input.pset at 2020-06-04 11:53:41
Finish Create_test_data.input.pset at 2020-06-04 11:54:04
Start mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:54:04
Finish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:56:51
Start Create_test_data.input.pset at 2020-06-04 11:56:51
Finish Create_test_data.input.pset at 2020-06-04 11:57:14
Start mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:57:14
Finish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:59:55
Start Create_test_data.input.pset at 2020-06-04 11:59:55
Finish Create_test_data.input.pset at 2020-06-04 12:00:23
Start mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 12:00:23
Finish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 12:03:23
Start Create_test_data.input.pset at 2020-06-04 12:03:23
Finish Create_test_data.input.pset at 2020-06-04 12:03:49
Start mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 12:03:49
Finish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 12:06:46


Получается такая картина:
Graph Start time Finish time Length
Create_test_data.input.pset 04.06.2020 11:49:11 04.06.2020 11:49:37 00:00:26
mdw_load.day_one.current.
dev42_1_db_usl_testing_subj_org_finval.pset
04.06.2020 11:49:37 04.06.2020 11:50:42 00:01:05
Create_test_data.input.pset 04.06.2020 11:50:42 04.06.2020 11:51:06 00:00:24
mdw_load.regular.current.
dev42_1_db_usl_testing_subj_org_finval.pset
04.06.2020 11:51:06 04.06.2020 11:53:41 00:02:35
Create_test_data.input.pset 04.06.2020 11:53:41 04.06.2020 11:54:04 00:00:23
mdw_load.regular.current.
dev42_1_db_usl_testing_subj_org_finval.pset
04.06.2020 11:54:04 04.06.2020 11:56:51 00:02:47
Create_test_data.input.pset 04.06.2020 11:56:51 04.06.2020 11:57:14 00:00:23
mdw_load.regular.current.
dev42_1_db_usl_testing_subj_org_finval.pset
04.06.2020 11:57:14 04.06.2020 11:59:55 00:02:41
Create_test_data.input.pset 04.06.2020 11:59:55 04.06.2020 12:00:23 00:00:28
mdw_load.regular.current.
dev42_1_db_usl_testing_subj_org_finval.pset
04.06.2020 12:00:23 04.06.2020 12:03:23 00:03:00
Create_test_data.input.pset 04.06.2020 12:03:23 04.06.2020 12:03:49 00:00:26
mdw_load.regular.current.
dev42_1_db_usl_testing_subj_org_finval.pset
04.06.2020 12:03:49 04.06.2020 12:06:46 00:02:57

Видим, что 6 000 000 строк инкремента обрабатываются за 3 минуты, что достаточно быстро.
Данные в целевой таблице получились распределёнными следующим образом:
select valid_from_ts, valid_to_ts, count(1), min(sk), max(sk) from dev42_1_db_usl.TESTING_SUBJ_org_finval group by valid_from_ts, valid_to_ts order by 1,2;


Можно разглядеть соответствие вставленных данных моментам запуска графов.
Значит можно запускать в Ab Initio инкрементальную загрузку данных в GreenPlum с очень высокой частотой и наблюдать высокую скорость вставки этих данных в GreenPlum. Конечно, раз в секунду запускаться не получится, так как Ab Initio, как и любое ETL-средство, при запуске требует времени на раскачку.

Заключение


Сейчас Ab Initio используется в Сбербанке для построения Единого семантического слоя данных (ЕСС). Этот проект подразумевает построение единой версии состояния различных банковских бизнес-сущностей. Информация приходит из различных источников, реплики которых готовятся на Hadoop. Исходя из потребностей бизнеса, готовится модель данных и описываются трансформации данных. Ab Initio загружает информацию в ЕСС и загруженные данные не только представляют интерес для бизнеса сами по себе, но и служат источником для построения витрин данных. При этом функционал продукта позволяет использовать в качестве приёмника различные системы (Hive, Greenplum, Teradata, Oracle), что даёт возможность без особых усилий подготавливать данные для бизнеса в различных требуемых ему форматах.

Возможности Ab Initio широки, например, прилагающийся фреймворк MDW даёт возможность строить техническую и бизнес-историчность данных из коробки. Для разработчиков Ab Initio даёт возможность не изобретать велосипед, а пользоваться множеством имеющихся функциональных компонентов, по сути являющихся библиотеками, нужными при работе с данными.

Автор эксперт профессионального сообщества Сбербанка SberProfi DWH/BigData. Профессиональное сообщество SberProfi DWH/BigData отвечает за развитие компетенций в таких направлениях, как экосистема Hadoop, Teradata, Oracle DB, GreenPlum, а также BI инструментах Qlik, SAP BO, Tableau и др.
Подробнее..

Новое поколение разработчиков. Чем они отличаются и почему это нормально

31.08.2020 16:23:29 | Автор: admin
image

Существует мнение, что незаметно в IT произошла революция. Для того чтобы стать разработчиком, сейчас не обязательно иметь профильное высшее образование. Многие вузы во всех странах стараются внедрять новые методики обучения, но система образования очень неповоротлива, любые изменения занимают большое количество времени, а рынок ждать не будет.

Именно эту реальность мы учли в Школе 21, где обучение построено на способностях человека находить информацию. Здесь используются методики без учителей, лекций и оценок, и это работает. Среди участников и те, кто никогда не программировал, и те, у кого есть какой-то опыт и техническое образование.

Одна из проблем в процессе обучения предложения о работе, которые получают большое количество участников, ещё не пройдя даже половины пути. Из-за высокого спроса на разработчиков профессия программиста стала доступна практически всем.

Мы решили обсудить плюсы и минусы такого положения дел с руководителем IT-департамента, тимлидом и двумя участниками Школы 21.

Андрей Карлов, руководитель IT-департамента блока Сервисы и безопасность


image
В культуре, к которой я привык, разработчик это творец. Ты чувствуешь, что создаёшь что-то новое, уникальное, то, чего ещё нет. Придумываешь, проектируешь. В той культуре, если в твоём коде находили ошибки, ты не считался квалифицированным разработчиком. Сейчас человек пишет тонны строк кода, рассчитывая на то, что кто-то другой их после него тестирует и проверяет, он об этом может не думать. Когда ты считаешь, что твоя работа только писать код, а проверять его дело тестировщика, теряется ответственность за качество твоей работы.

Это, на мой взгляд, очень сильно девальвирует профессию. Из разработчиков мы превращаемся в кодеров, которым сказали что-то написать, вот они и пишут. Я переживаю на эту тему, но вижу, что сейчас это распространённая тенденция. С другой стороны, я задумался, а почему это обязательно что-то плохое? Изменилось время, задачи, возможности. В департаменте, где я работаю, проходили стажировку 40 участников Школы 21, и 80 % из них получили офферы.

Я приверженец классической системы образования и считаю его очень важным.
При этом не из всех вузов выходят ребята с любовью к профессии, многие из нас ненавидят половину предметов, которые изучали. И многие считают, что им не повезло с преподавателями. Это не предмет плохой, это у тебя был плохой наставник. Но полюбил бы ты какой-то предмет, если бы у тебя не было вообще наставника, тоже большой вопрос. Наставник сформировал у тебя какое-то к нему отношение: либо положительное, либо отрицательное. А когда ты механически учишься, у тебя, скорее всего, никакого отношения к этому не будет. Это набор каких-то алгоритмов, действий, подходов. Айтишники всё больше стали нужны не только классическим IT-компаниям, а всему большому бизнесу. Их постоянно не хватает, рынок давно перегрет.

Это очень сильно влияет на самомнение. Люди считают, что они с лёгкостью найдут работу, если у них в резюме просто написано Java. При этом они часто очень мало что пробовали и видели в жизни, а тем более не создавали сложные системы.

В итоге как только ты окунаешься в какой-то большой проект, начинаешь ощущать, сколько ещё знаний и опыта тебе нужно получить. Особенно это проявляется, когда что-то идёт не так. Обычно сначала у всех всё хорошо, пока всё получается, все бодрые и весёлые, а когда возникает первая проблема не успеваешь в дедлайн, кусок твоего кода повлёк инцидент, и система начала падать ты не знаешь, что с этим делать.

Всё циклично, это изменится, и я думаю, что мы снова начнём воспринимать профессию разработчика как человека, который создаёт что-то новое, уникальное, качественное и классное, а не просто выполняет задачу.

Никита Полежаев, руководитель группы разработки


image
Каждый стажёр определяется в команду, которая работает над реальным продуктом на том технологическом стеке, который интересен стажёру. Стажёр закрепляется за тимлидом и начинает своё обучение. По разным направлениям программы обучения немного отличаются, но основной концепт везде один и тот же, где стажёры получают:

  • Ресурсы, откуда можно черпать знания.
  • Учебное задание. Обычно это какой-то самостоятельный проект, который он должен написать сам. Тимлид в процессе разработки продукта проверяет код, рассказывает лучшие практики. Таким путём мы оттачиваем правильный подход к разработке и даём фундаментальные знания по работе с промышленными фреймворками.

После стажёр начинает работу в реальном проекте вместе с командой, в которую его определили. Там он изучает паттерны проектирования программ. На этом этапе ему обычно даются отдельные компонентные задачи, которые проверяют и с которыми помогают остальные разработчики.

На финальном этапе стажёр перестает быть стажёром и становится младшим разработчиком. Джун может сам выполнить отдельные поставленные перед ним задачи, в его коде не бывает серьёзных архитектурных или функциональных ошибок. На этом этапе мы обычно принимаем решение о зачислении в штат.

На мой взгляд, самое сложное это понять, что промышленная разработка, это не просто написать маленький учебный проект. Есть релизный цикл, тестирование, DevOps и реальные пользователи. Стажёры понимают, что работа разработчика это не всегда занятие прикольными, интересными и инновационными вещами. Порой мы сталкиваемся с муторной работой, но это обязательная часть работы любого разработчика.

Камиль Алиев, участник Школы 21


image
Моё основное образование бизнес-менеджмент, которому я учился даже не в России, а в штате Вирджиния. Сейчас я уже окончил стажировку и успел попробовать как разработку игр на Unity, так и DevOps. Работаю над сборкой, тестированием и хранением артефактов по коммиту. В банке существуют свои требования по безопасности и качеству кода, и до моего прихода такими вещами занимались сами разработчики. Эту часть работы сейчас выполняет наша небольшая команда. В основном я помогаю iOS и macOS проектам, однако в последние пару месяцев мною решалась задача деплоя системы с нуля, которая включала в себя полноценный фронт и бэк. Стек Jenkins, Docker, Ansible, Fastlane, Xcode, Nginx, SonarQube, Python.

Ещё до Школы 21 я решил попробовать сферу IT, но думаю, без неё не удалось бы совершить этот переход так быстро. Школа 21 дала мощный толчок в начале, который я лично считаю очень важным. В этом заслуга программы обучения в виде бассейна с множеством заданий разного уровня, которые не дают тебе прийти в себя и осознать, что происходит, однако по прохождению ты наконец осознаёшь объём материала, который удалось перелопатить.

Школа 21 больше про прокачку навыка поиска нужной информации, про работу в команде и про правильную оценку результатов. Главное преодоление страха в отсутствии хард скилов. Мне несколько раз приходилось изучать что-то с нуля, и при должном отношении к этой проблеме она становится обыденной.

Андрей Карлов, руководитель IT-департамента блока Сервисы и безопасность


Наше подразделение отвечает за технологическую поддержку работы всех зданий и связанных процессов. И мы были первым департаментом, который вошёл в эксперимент со Школой 21.

Как это выглядело для меня? Много людей, которые раньше не имели никакого отношения к IT, бросили всё и сделали ставку на развитие в этой области. У нас было скептическое отношение, мы как-то привыкли, что айтишники это своего рода отдельная каста. Вход только для своих людей с классическим математическим или техническим образованием. Чтобы с пелёнок разбирал-собирал компьютер, в девять лет уже написал три разные программы, поиграл с друзьями по сети.

Как мы думали до встречи со стажёрами Школы 21, основной риск был в том, что с участниками нужно будет нянчиться. Участники, которые пришли к нам на стажировку, по методологии Школы 21 были на седьмом уровне. И это, мягко говоря, не сильно применимо к нашим реалиям. Мы ожидали, что ребят нужно переучивать. Дальше был вопрос насколько это будет трудоёмко.

Но и так оказалось, что наши опасения не оправдались. Именно тяга к знаниям, изменениям и навык учиться и переобучаться даёт свои плоды. Многие ребята перешли на постоянную работу, при этом продолжая обучение. В итоге с нашей стороны только позитивные отзывы. Мы начинали в рамках одного управления, на текущий момент ребята работают уже в более чем половине департаментов Сбера.

Действительно, все очень скептически к этому относились, но всё получилось, на наш взгляд, очень хорошо. Именно идейность и целеустремлённость помогает ребятам очень быстро обучаться, получать удовольствие от новой работы и двигаться вперёд.
В целом работа со стажёрами Школы 21 в команде почти не отличается от того, как наша команда адаптирует обычных джунов с небольшим опытом работы и техническим образованием.

Участники включаются в команду, в которой есть тимлид, эксперты и которой поставлены общие задачи. Сначала им даются задачи попроще, ребятам подсказывают, с чего начать, что почитать, что изучить. Они знают, к кому обратиться, если что-то непонятно. Стажёры такие же полноценные участники команды, и, как и у всех, у них могут быть какие-то затыки, сложности и проблемы. Они у всех разные, но всегда известно к кому обратиться, с кем пообщаться. Начинают стажёры, когда у них есть простые тестовые задачи, когда они занимаются какими-то исследованиями.

Например, мы готовимся к реализации новой функциональности. И чтобы стажёрам не было страшно, что они что-то натворят и проект из-за этого встанет, мы просим их исследовать какие-то вещи, попробовать что-то простенькое, прикинуть что и как. И по мере того как ребята вливаются, они получают боевые задачи.

Ирина Дровянникова, участница Школы 21


image
Я переехала в Москву из Воронежа, где заканчиваю Воронежский государственный университет по двум направлениям менеджмент и бизнес-администрирование.

Мне нравится, что в Школе 21 нет никакой конкуренции, все учатся в своём темпе и всегда готовы прийти на помощь, если ты в ней нуждаешься. Я проходила самый первый бассейн самого первого набора, о Школе 21 не было практически никакой информации. Многое казалось неправдой: непонятно было, зачем Сберу открывать это, почему бесплатно, как это без учителей? Казалось, что в этом есть какой-то подвох. Поэтому особо не строила ожиданий.

Я из тех участников, кто впервые увидел терминал во время бассейна. Сейчас работаю в Сбербанке, получив оффер через пять месяцев стажировки. За это время работала над разными проектами. Например, в лаборатории робототехники Сбербанка разрабатывала интерфейсы для роботов, у которых есть экраны. Сейчас работаю над двумя проектами. Первый это приложение, которое поможет рассчитать более выгодный тариф при расходовании электроэнергии для разных объектов банка и его экосистемы. А второй приложение, в котором команды разработки смогут грамотно управлять доступными им серверами или арендовать новые без кучи заявок или отдельных специальных людей, отвечающих за это. Здесь постоянно идёт упрощение процессов, с которыми сталкиваются разработчики, и мне нравится участвовать в этом.

Итог


Это только часть историй участников Школы 21. Например, ещё есть востоковед, ставший Java-разработчиком, архитектор iOS-разработчик, стоматолог data scientist, специалист управления ж/д перевозками сегодня ведущий инженер по разработке в одном из блоков IТ-департамента. Все они доказывают, что желание стать айтишником может появиться в абсолютно любой момент и у совершенно разных людей.

Очень круто, что наш проект даёт возможность начинающим специалистам осваивать IТ-сферу. Даже если у них нет технического бэкграунда, участники Школы 21 на равных конкурируют с теми, кто получал профильное образование. В течение обучения в Школе 21 участники учатся получать информацию разными способами, работать над командными проектами. Результат такого опыта эффективное использование полученных знаний на стажировке и во время полноценной работы в компании.
Подробнее..

Что такое Школа 21, и почему она устроена именно так

16.06.2020 18:07:02 | Автор: admin
Привет, Хабр! Меня зовут Светлана Инфимовская, я директор Школы 21. Знаю, что многие из вас слышали о ней, а кто-то даже участвовал в наших отборочных бассейнах. При этом сама идея проекта, его методология не всегда правильно понята. Кому-то кажется, что в Школе 21 одна тусовка, кто-то, наоборот, считает её слишком жёсткой, третьи со скепсисом относятся к идее обучать разработке людей без фундаментальной базы.

Я постараюсь рассказать о том, что такое Школа 21, в чём специфика подхода и методологии так, чтобы ожидания от школы и реальность обучения подошли друг у другу максимально близко. Можно уйти в детали педагогического дизайна, но суть Школы именно в её участниках и атмосфере.



По своему опыту я знаю, что методология может вызывать скепсис, так как сама сначала так относилась к Ecole 42 французскому проекту, франшизой которой является наша школа. В России об Ecole 42 заговорили в 2017 году, когда о ней восхищённо написал Павел Дуров. Мне же повезло познакомиться со школой на четыре года раньше, в первый год её существования. Под катом я расскажу, как от мнения, что подход Ecole 42 полный абсурд, я пришла к тому, что стала искать возможность открыть такую школу в России.

Так вышло, что я давно знакома с Николя Садираком, сооснователем оригинальной Школы 42, ещё со времён его работы в Эпитехе, частном французском технологическом университете, который во многом стал прототипом Ecole 42. Являясь частью российского ИТ, сначала я отнеслась к идее со снобизмом. Разве могут люди, которых обучают в таком формате, писать нормальный код? Плюс я с большим пиететом отношусь к классическому образованию. Я сказала себе, что нужно подождать, как первые выпускники будут оценены работодателями. Хотя особых сомнений в их трудоустройстве у меня не было, так как последние 20 лет мы все наблюдаем экспоненциальный рост потребности в айтишниках уже во всех отраслях.

Время шло, и в 2016 году Школа 42 открылась уже в Калифорнии. О ней стали говорить руководители и основатели Twitter, Snapchat, Slack, Nest, Airbnb, писать Bloomberg и The New York Times. Люди, которые в ней учились, стали вливаться в международные компании, и работодатели были ими довольны. Оказалось, что для них сотрудник, который пишет код, просто решающий бизнес-задачу, уже хорош. Речь уже не шла о дипломе топового университета, ребят брали без традиционной базы. Каждый год школа готовила почти тысячу джунов силами команды из 25 человек.

В России айтишники тоже стали нужны не только ИТ-компаниям. Промышленность, финансы, телеком, логистика цифровая трансформация захватывала всё большие отрасли. Ни классическое высшее образование, ни даже собственные образовательные инициативы интернет-компаний до сих пор не могут удовлетворить весь спрос на кадры.

Я загорелась идеей открыть Ecole 42 у нас в стране, стала выходить на различные компании, которые могли бы в этом поучаствовать, а вскоре узнала, что франшизу для России купил Сбербанк и сделал обучение в ней бесплатным. Я со своей стороны выразила готовность всячески помогать проекту.

Сложно придумать более скучное и пугающее для русскоязычного человека словосочетание, чем директор школы, но тут дело в ложных друзьях переводчика. Во Франции школой называется высшее учебное заведение. И одна из глобальных задач, которую хотят решить основатели Ecole 42, изменить подход к образованию профессионалов и их менталитет. Чтобы они не стремились заслужить одобрение преподавателя или получить заветный зачёт. Они должны уметь нести ответственность за себя и те результаты, которые от них ожидают будущие работодатели.

Четыре недели отбора


В Школе 21 нет классических вступительных экзаменов, поэтому к поступлению нельзя подготовиться. В течение четырёх недель абитуриенты смогу попробовать проплыть бассейн.

Бассейн это, с одной стороны, интенсив по программированию, а с другой уникальная эмуляция реальной жизни. У каждого из нас задач больше, чем мы можем сделать за день; так и на бассейне задач больше, чем ты обычно можешь успеть. Это учит тебя приоритизации. У тебя каждый день дедлайны это учит тебя правильно планировать своё время. Система проверяет до первой ошибки это учит тебя внимательности, что является одним из столпов программирования. Ты должен проверять других участников, а они тебя, что учит общаться кратко и по сути с незнакомыми людьми. У нас в крови пренебрежительное отношение к инструкциям Школа 21 показывает важность и этого элемента в части экономии времени для достижения результата.

За месяц все эти навыки войдут в привычку, и участник сможет увидеть эффект, который в рамках одной или даже двух недель просто не достижим.



На мой взгляд, бассейн это испытательный срок не только для абитуриентов, но и для Школы: треть участников уходит в первую неделю. Кому-то не подходит ритм, кто-то не готов к самостоятельности, кого-то выбивают из колеи досадные ошибки. Те, кто доходят до конца, как 300 спартанцев, только живых и закалённых в бою! Объединяет их одно несмотря ни на что, им нравится программировать. Из них обычно половина становится нашими участниками. Многие из тех, кто не прошёл, не бросают программирование и продолжают свой путь, но уже не в рамках Школы.

Бассейн период самой высокой нагрузки за весь период обучения. Именно у тех, кто отсеялся на этом этапе, остаётся впечатление, что Школа это невыносимо сложно. Часто кто-то пытается это совместить с работой или учёбой из этого ничего не выходит. Половина участников здесь впервые начинает программировать, а треть осваивать английский язык, на котором у нас все задания.

Те же, кто даже не поступил, но дошёл до конца, совсем иного мнения о бассейне как о фантастическом опыте познания и испытания самого себя. Психологически сложно ребятам с синдромом отличника банально нет времени всё перепроверить и успеть сделать все задачи. Но так и в реальной жизни, к которой обычная школа и университет нас не готовят. Поэтому у нас это тоже часть учебного процесса.

Мы часто дискутируем с участниками, что важнее: вгрызаться в проблему, разбирая её по кусочкам, или быстро вникнуть и предложить вариант решения? На это нет однозначного ответа в компаниях нужны и те и другие. Одни смогут быстро делать прототипы, вторые доводить их до ума.



Принимать ли человека на основное обучение или нет, решает динамика самого абитуриента относительно самого себя. На первых четырёх бассейнах участники сами делали классические рейтинги абитуриентов, и удивлялись тому, что они не совпадали с результатом.

Тем, кто ни разу не программировал, сложно первые две недели, а тем, кто что-то изучал или пробовал кодить, последние две. Часто те, кому сначала легко, показывают отрицательную динамику и не попадают на дальнейшие обучение, тогда как вчерашний курьер может стать частью Школы 21.

Обучение


Эти четыре недели заставляют человека по-новому взглянуть на планирование и свои возможности. Школа 21 работает без учителей 24 часа в сутки семь дней в неделю. У нас нет лекций, семинаров и экзаменов. У нас можно закончить обучение за полтора года, а можно за три с половиной. Людям, которые привыкли к структурности, заданной обычной школой, университетом или работой с девяти до шести, нужно перестроить своё сознание, чтобы суметь быть продуктивным в условиях такой свободы и существующих требований. Если ты откладываешь проект до последнего дня, то точно не успеешь его сдать. Если ты учишься без сна и обеда, то сил в конце концов у тебя не останется. Это очень меняет людей.

Всё обучение геймифицировано. С одной стороны студент соревнуется с самим с собой, с другой он часть команды, которая меняется каждую неделю. Так что шутки о двух баллах Гриффиндору и распределительной шляпе у нас уже все пошучены. При этом каждый студент движется по своей уникальной траектории. Ты сам выбираешь направление, по которому будешь учиться. Сейчас среди направлений алгоритмы, графика, мобильная разработка, Unix, системное администрирование, кибербезопасность и т.д. Но при этом, если в процессе ты понимаешь, что выбранное направление не твоё, ты легко можешь сменить траекторию. Например, очень много студентов выбрали графику, но, осознав её сложность, перешли на другую ветку. Можно идти по нескольким направлениям, а можно по всем сразу. Всё зависит от человека и его умения оценивать и переоценивать свои силы и расставлять приоритеты.
Все студенты должны проходить и защищать стажировки, которые они ищут сами без помощи со стороны школы. Первую из них нужно начать максимум через год после старта обучения. Ребята сами пишут CV, с которым мы им помогаем, готовятся к собеседованиям, делятся лайфхаками.

В методологии Ecole 42 есть 21 уровень, но это не значит, что закончить такую школу можно только достигнув заветного 21 уровня. Только ты решаешь, какая твоя стажировка финальная. При этом почти все получают оффер по итогам первой, и здесь перед тобой стоит выбор, где учиться дальше: в школе или на работе. Важно понимать, что скорость твоего карьерного роста прямо пропорционально связана с тем, как далеко ты продвинулся в уровнях обучения. У всех разные жизненные обстоятельства. Есть студенты, первый же оффер которых после стажировки превышает их доходы от старой работы в разы. Но если сейчас человек пойдёт на перегретый рынок, бросив обучение, то имеет большие шансы застрять на джуниорской позиции. С этим вызовом сталкиваются все школы Ассоциации 42. Мы с этого года активно перерабатываем проекты, доступные после первой стажировки, разрабатываем учебные интенсивы по новым и востребованным языкам программирования, чтобы у участников не было сомнений, что продолжать учиться им просто жизненно необходимо.

Если на бассейне у тебя каждый день задания, которые нужно сдать на следующий день, то на основном обучении у тебя есть дедлайны от одного до трёх месяцев. Ты должен спланировать своё время так, чтобы успеть сделать и оттестить свой проект, пройти проверку пятью другими участниками и системой. Если ты оставил всё на последний момент, есть шансы не успеть и вылететь. В Школе нет классического академа, все форс-мажоры уже заложены в эти дедлайны. Конечно, есть исключения, например, мы ждём уже пятерых ребят из армии, и двоих девушек из декрета.

Для нас важно дать участнику ускорение, перестроить его отношение к учёбе, показать ценность общения и сообщества, научить не бояться спрашивать, пробовать и ошибаться, найти свой путь получения знаний. Уже более 300 наших участников приняли на стажировки в 50 компаний, от голубых фишек до стартапов. Это здорово, но я не призываю спешить с выводами об успешности. Думаю, что мы сможем их сделать через три года, когда первые выпускники выйдут на работу, и мы сможем посмотреть за их динамикой, относительно других студентов.

Peer-to-peer и важность коммуникации


Главный метод обучения в Школе равный равному. Он состоит в том, что сегодня ты проверяешь кого-то, а завтра кто-то проверяет тебя. Роли постоянно меняются. Очень быстро, ещё на бассейне люди выявляют центры знаний по определённым направлениям и часто обращаются к ним. Найти ответ на каждый вопрос можно погуглив, задав вопрос в слаке или спросив соседа справа или слева. Гарантирует ли это, что тебе дадут верный совет? Конечно, нет, но научит ещё одному из навыков, который будет полезен в работе, критическому мышлению и способности находить валидную информацию.



В Школе 21 учатся и те, кто окончил Физтех, и те, кто вчера работал курьером, бортпроводником или юристом. При этом выпускник мехмата (или матмеха) вряд ли приходит к нам научиться основам программирования, скорее за опытом командной работы и другим софтскилам, которым нет места в классическом образовании. Такой сплав людей с разным опытом, образованием, возрастом и знаниями просто невозможен ни в одном университете и даёт неоценимый опыт и возможности.



На мой взгляд, коммуникация важна всегда и для всех, даже для самых угрюмых интровертов. Разве не ценнее писать код, понимая, частью какого проекта он является, как он будет внедрён и что это даст людям? В Школе царит атмосфера, где каждый может найти себе единомышленников, которые подойдут ему по темпераменту, интересу и знаниям. Но софтскилы не ограничиваются только общением. Одна из важнейших целей вернуть ответственность за себя самим участникам. Ты сам составляешь своё расписание (тайм-менеджмент), ты сам формируешь команду (командная работа), ты сам ищешь путь к новым знаниям для выполнения проектов (автономность), ты сам защищаешь проекты (ответственность за результат), ты сам выбираешь, когда будет твоя сессия до выхода на стажировку ты должен сдать серию из пяти экзаменов, которые проходят каждую неделю (планирование), ты можешь переделывать и пересдавать экзамены столько, сколько тебе потребуется (право на ошибку) и так далее.
Подробнее..

Звук. От механических колебаний до ALSA SoC Layer

22.09.2020 10:23:41 | Автор: admin


Мы в SberDevices делаем устройства, на которых можно послушать музыку, посмотреть кино и ещё много всего. Как вы понимаете, без звука это всё не представляет интереса. Давайте посмотрим, что происходит со звуком в устройстве, начиная со школьной физики и заканчивая ALSA-подсистемой в Linux.

Что же такое звук, который мы слышим? Если совсем упрощать, то это колебания частиц воздуха, которые доходят до нашей барабанной перепонки. Мозг их, разумеется, потом переводит в приятную музыку или в звук проезжающего за окном мотоциклиста, но давайте пока остановимся на колебаниях.

Люди ещё в 19 веке поняли, что можно попытаться записать звуковые колебания, а потом их воспроизвести.

Для начала посмотрим, как работало одно из первых звукозаписывающих устройств.


Фонограф и его изобретатель Томас Эдисон
Источник фото

Тут всё просто. Брали какой-нибудь цилиндр, обматывали фольгой. Потом брали что-нибудь конусообразное (чтобы было погромче) с мембраной на конце. К мембране присоединена маленькая иголка. Иголку прислоняли к фольге. Потом специально обученный человек крутил цилиндр и что-нибудь говорил в резонатор. Иголка, приводимая в движение мембраной, делала в фольге углубления. Если достаточно равномерно крутить цилиндр, то получится намотанная на цилиндр зависимость амплитуды колебаний мембраны от времени.



Чтобы проиграть сигнал, надо было просто прокрутить цилиндр ещё раз с начала иголка будет попадать в углубления и передавать записанные колебания в мембрану, а та в резонатор. Вот мы и слышим запись. Можно легко найти интересные записи энтузиастов на ютубе.

Переход к электричеству


Теперь рассмотрим что-нибудь более современное, но не очень сложное. Например, катушечный микрофон. Колебания воздуха теперь изменяют положение магнита внутри катушки и благодаря электромагнитной индукции мы получаем на выходе зависимость амплитуды колебаний магнита (а значит, и мембраны) от времени. Только теперь эта зависимость выражается не углублениями на фольге, а зависимостью электрического напряжения на выходе микрофона от времени.



Чтобы можно было хранить такое представление колебаний в памяти компьютера, их надо дискретизировать. Этим занимается специальная железка аналогово-цифровой преобразователь (АЦП). АЦП умеет много раз за одну секунду запоминать значение напряжения (с точностью до разрешения целочисленной арифметики АЦП) на входе и записывать его в память. Количество таких отсчётов за секунду называется sample rate. Типичные значения 8000 Hz 96000 Hz.

Не будем вдаваться в подробности работы АЦП, потому что это заслуживает отдельной серии статей. Перейдём к главному весь звук, с которым работают Linux-драйверы и всякие устройства, представляется именно в виде зависимости амплитуды от времени. Такой формат записи называется PCM (Pulse-code modulation). Для каждого кванта времени длительностью 1/sample_rate указано значение амплитуды звука. Именно из PCM состоят .wav-файлы.

Пример визуализации PCM для .wav-файла с музыкой, где по горизонтальной оси отложено время, а по вертикальной амплитуда сигнала:



Так как на нашей плате стереовыход под динамики, надо научиться хранить в одном .wav-файле стереозвук: левый и правый канал. Тут всё просто сэмплы будут чередоваться вот так:



Такой способ хранения данных называется interleaved. Бывают и другие способы, но сейчас их рассматривать не будем.

Теперь разберёмся, какие электрические сигналы нам нужны, чтобы можно было организовать передачу данных между устройствами. А нужно не много:

  1. Bit Clock(BCLK) тактирующий сигнал (или клок), по которому аппаратура определяет, когда надо отправить следующий бит.
  2. Frame Clock (FCLK или его ещё называют LRCLK) тактирующий сигнал, по которому аппаратура понимает, когда надо начать передавать другой канал.
  3. Data сами данные.



Например, у нас есть файл со следующими характеристиками:
  • sample width = 16 bits;
  • sampling rate = 48000 Hz;
  • channels = 2.

Тогда нам надо выставить следующие значения частот:
  • FCLK = 48000 Hz;
  • BCLK = 48000 * 16 * 2 Hz.

Чтобы передавать ещё больше каналов, используется протокол TDM, который отличается от I2S тем, что FCLK теперь не обязан иметь скважность 50%, и восходящий фронт лишь задаёт начало пакета сэмплов, принадлежащих разным каналам.

Общая схема


Под рукой как раз оказалась плата amlogic s400, к которой можно подключить динамик. На неё установлено ядро Linux из upstream. На этом примере и будем работать.

Наша плата состоит из SoC (amlogic A113x), к которому подключен ЦАП TAS5707PHPR. И общая схема выглядит следующим образом:

Что умеет SoC:
  • SoC имеет 3 пина: BCLK, LRCLK, DATA;
  • можно сконфигурировать CLK-пины через специальные регистры SoC, чтобы на них были правильные частоты;
  • ещё этому SoC можно сказать: Вот тебе адрес в памяти. Там лежат PCM-данные. Передавай эти данные бит за битом через DATA-линию. Такую область памяти будем называть hwbuf.

Чтобы воспроизвести звук, Linux-драйвер говорит SoC, какие нужно выставить частоты на линиях BCLK и LRCLK. К тому же Linux-драйвер подсказывает, где находится hwbuf. После этого ЦАП (TAS5707) получает данные по DATA-линии и преобразует их в два аналоговых электрических сигнала. Эти сигналы потом передаются по паре проводов {analog+; analog-} в два динамика.

Переходим к Linux


Мы готовы перейти к тому, как эта схема выглядит в Linux. Во-первых, для работы со звуком в Linux есть библиотека, которая размазана между ядром и userspace. Называется она ALSA, и рассматривать мы будем именное её. Суть ALSA в том, чтобы userspace и ядро договорились об интерфейсе работы со звуковыми устройствами.

Пользовательская ALSA-библиотека взаимодействует с ядерной частью с помощью интерфейса ioctl. При этом используются созданные в директории /dev/snd/ устройства pcmC{x}D{y}{c,p}. Эти устройства создаёт драйвер, который должен быть написан вендором SoC. Вот, например, содержимое этой папки на amlogic s400:

# ls /dev/snd/controlC0    pcmC0D0p   pcmC0D0с   pcmC0D1c   pcmC0D1p   pcmC0D2c

В названии pcmC{x}D{y}{c,p}:
X номер звуковой карты (их может быть несколько);
Y номер интерфейса на карте (например, pcmC0D0p может отвечать за воспроизведение в динамики по tdm интерфейсу, а pcmC0D1c за запись звука с микрофонов уже по другому аппаратному интерфейсу);
p говорит, что устройство для воспроизведения звука (playback);
c говорит, что устройство для записи звука (capture).

В нашем случае устройство pcmC0D0p как раз соответствует playback I2S-интерфейсу. D1 это spdif, а D2 pdm-микрофоны, но о них мы говорить не будем.

Device tree


Описание звуковой карты начинается с device_tree [arch/arm64/boot/dts/amlogic/meson-axg-s400.dts]:
sound {    compatible = "amlogic,axg-sound-card";    model = "AXG-S400";    audio-aux-devs = <&tdmin_a>, <&tdmin_b>,  <&tdmin_c>,             <&tdmin_lb>, <&tdmout_c>;                      dai-link-6 {        sound-dai = <&tdmif_c>;        dai-format = "i2s";        dai-tdm-slot-tx-mask-2 = <1 1>;        dai-tdm-slot-rx-mask-1 = <1 1>;        mclk-fs = <256>;        codec-1 {            sound-dai = <&speaker_amp1>;        };    };               dai-link-7 {        sound-dai = <&spdifout>;        codec {            sound-dai = <&spdif_dit>;        };    };    dai-link-8 {        sound-dai = <&spdifin>;        codec {            sound-dai = <&spdif_dir>;        };    };    dai-link-9 {        sound-dai = <&pdm>;        codec {            sound-dai = <&dmics>;        };    };};&i2c1 {    speaker_amp1: audio-codec@1b {        compatible = "ti,tas5707";        reg = <0x1b>;        reset-gpios = <&gpio_ao GPIOAO_4 GPIO_ACTIVE_LOW>;        #sound-dai-cells = <0>;                   };};&tdmif_c {    pinctrl-0 = <&tdmc_sclk_pins>, <&tdmc_fs_pins>,            <&tdmc_din1_pins>, <&tdmc_dout2_pins>,            <&mclk_c_pins>;    pinctrl-names = "default";    status = "okay";};

Тут мы видим те 3 устройства, которые потом окажутся в /dev/snd: tdmif_c, spdif, pdm.

Устройство, по которому пойдёт звук, называется dai-link-6. Работать оно будет под управлением TDM-драйвера. Возникает вопрос: вроде мы говорили про то, как передавать звук по I2S, а тут, вдруг, TDM. Это легко объяснить: как я уже писал выше, I2S это всё тот же TDM, но с чёткими требованиями по скважности LRCLK и количеству каналов их должно быть два. TDM-драйвер потом прочитает поле dai-format = i2s; и поймёт, что ему надо работать именно в I2S-режиме.

Далее указано, какой ЦАП (внутри Linux они входят в понятие кодек) установлен на плате с помощью структуры speaker_amp1. Заметим, что тут же указано, к какой I2C-линии (не путать с I2S!) подключен наш ЦАП TAS5707. Именно по этой линии будет потом производиться включение и настройка усилителя из драйвера.

Структура tdmif_c описывает, какие пины SoC будут выполнять роли I2S-интерфейса.

ALSA SoC Layer


Для SoC, внутри которых есть поддержка аудио, в Linux есть ALSA SoC layer. Он позволяет описывать кодеки (напомню, что именно так называется любой ЦАП в терминах ALSA), позволяет указывать, как эти кодеки соединены.

Кодеки в терминах Linux kernel называются DAI (Digital Audio Interface). Сам TDM/I2S интерфейс, который есть в SoC, тоже называется DAI, и работа с ним проходит схожим образом.

Драйвер описывает кодек с помощью struct snd_soc_dai. Самая интересная часть в описании кодека операции по выставлению параметров передачи TDM. Находятся они тут: struct snd_soc_dai -> struct snd_soc_dai_driver -> struct snd_soc_dai_ops. Рассмотрим самые важные для понимания поля (sound/soc/soc-dai.h):

struct snd_soc_dai_ops {    /*     * DAI clocking configuration.     * Called by soc_card drivers, normally in their hw_params.     */    int (*set_sysclk)(struct snd_soc_dai *dai,        int clk_id, unsigned int freq, int dir);    int (*set_pll)(struct snd_soc_dai *dai, int pll_id, int source,        unsigned int freq_in, unsigned int freq_out);    int (*set_clkdiv)(struct snd_soc_dai *dai, int div_id, int div);    int (*set_bclk_ratio)(struct snd_soc_dai *dai, unsigned int ratio);    ...
Те самые функции, с помощью которых выставляются TDM-клоки. Эти функции обычно имплементированы вендором SoC.

...int (*hw_params)(struct snd_pcm_substream *,    struct snd_pcm_hw_params *, struct snd_soc_dai *);...
Самая интересная функция hw_params().
Она нужна для того, чтобы настроить всё оборудование SoC согласно параметрам PCM-файла, который мы пытаемся проиграть. Именно она в дальнейшем вызовет функции из группы выше, чтобы установить TDM-клоки.

...int (*trigger)(struct snd_pcm_substream *, int,    struct snd_soc_dai *);...
А эта функция делает самый последний шаг после настройки кодека переводит кодек в активный режим.

ЦАП, который будет выдавать аналоговый звук на динамик, описывается ровно такой же структурой. snd_soc_dai_ops в этом случае будут настраивать ЦАП на прием данных в правильном формате. Такая настройка ЦАП как правило осуществляется через I2C-интерфейс.

Все кодеки, которые указаны в device tree в структуре,
dai-link-6 {    ...    codec-1 {        sound-dai = <&speaker_amp1>;    };};

а их может быть много, добавляются в один список и прикрепляются к /dev/snd/pcm* устройству. Это нужно для того, чтобы при воспроизведении звука ядро могло обойти все необходимые драйверы кодеков и настроить/включить их.

Каждый кодек должен сказать какие PCM-параметры он поддерживает. Это он делает с помощью структуры:
struct snd_soc_pcm_stream {    const char *stream_name;    u64 formats;            /* SNDRV_PCM_FMTBIT_* */    unsigned int rates;     /* SNDRV_PCM_RATE_* */    unsigned int rate_min;      /* min rate */    unsigned int rate_max;      /* max rate */    unsigned int channels_min;  /* min channels */    unsigned int channels_max;  /* max channels */    unsigned int sig_bits;      /* number of bits of content */};

Если какой-нибудь из кодеков в цепочке не поддерживает конкретные параметры, всё закончится ошибкой.

Соответствующую реализацию TDM-драйвера для amlogic s400 можно посмотреть в sound/soc/meson/axg-tdm-interface.c. А реализацию драйвера кодека TAS5707 в sound/soc/codecs/tas571x.c

Пользовательская часть


Теперь посмотрим что происходит, когда пользователь хочет проиграть звук. Удобный для изучения пример реализации пользовательской ALSA это tinyalsa. Исходный код, относящийся ко всему нижесказанному, можно посмотреть там.
В комплект входит утилита tinyplay. Чтобы проиграть звук надо запустить:

bash$ tinyplay ./music.wav -D 0 -d 0
(-D и -d параметры говорят, что звук надо проигрывать через /dev/snd/pcmC0D0p).

Что происходит?
Вот краткая блок-схема, а потом будут пояснения:



  1. [userspace] Парсим .wav header, чтобы узнать PCM-параметры (sample rate, bit width, channels) воспроизводимого файла. Складываем все параметры в struct snd_pcm_hw_params.
  2. [userspace] Открываем устройство /dev/snd/pcmC0D0p.
  3. [userspace] Обращаемся к ядру с помощью ioctl(, SNDRV_PCM_IOCTL_HW_PARAMS ,), чтобы узнать поддерживаются такие PCM-параметры или нет.
  4. [kernel] Проверяем PCM-параметры, которые пытается использовать пользователь. Тут есть два типа проверок:
    • на общую корректность и согласованность параметров;
    • поддерживает ли каждый задействованный кодек такие параметры.
  5. настраиваем под них все кодеки, которые прикреплены к /dev/snd/pcmC0D0p интерфейсу (но пока не включаем), возвращаем успех.
  6. [userspace] выделяем временный буфер, куда будем класть PCM-данные.
  7. [userspace] отдаем заполненный временный буфер ядру с помощью ioctl(, SNDRV_PCM_IOCTL_WRITEI_FRAMES, ). Буква I в конце слова WRITEI указывает, что PCM-данные хранятся в interleaved-формате.
  8. [kernelspace] включаем кодеки, которые прикреплены к /dev/snd/pcmC0D0p интерфейсу, если они еще не включены.
  9. [kernelspace] копируем пользовательский буфер buf в hwbuf (см. пункт Общая схема) с помощью copy_from_user().
  10. [userspace] goto 6.

Реализацию ядерной части ioctl можно посмотреть, поискав по слову SNDRV_PCM_IOCTL_*

Заключение


Теперь у нас есть представление о том, куда попадает звук в Linux ядре. В следующих статьях будет разбор того, как звук проигрывается из Android-приложений, а для этого ему надо пройти ещё немалый путь.
Подробнее..

Почему меня разочаровали результаты Kaggle ARC Challenge

23.06.2020 14:06:23 | Автор: admin
Кто-то с ужасом, а кто-то с нетерпением ждет ИИ как в произведениях фантастов. С личностью, эмоциями, энциклопедическими знаниями и главное с интеллектом, то есть способностями к логическим выводам, оперированию абстрактными понятиями, выделению закономерностей в окружающем мире и превращению их в правила. Как мы знаем, именно такой ИИ теоретики называют сильным или ещё AGI. Пока это далеко не мейнстримное направление в машинном обучении, но руководители многих больших компаний уже считают, что сложность их бизнеса превысила когнитивные способности менеджеров и без настоящего ИИ двигаться вперёд станет невозможно. Идут дискуссии, что же это такое, каким он должен быть, как сделать тест чтобы уж точно понять, что перед нами AGI, а не очередной blackbox, который лучше человека решает локальную задачу например, распознавание лица на фотографии.

Три недели назад на каггле прошло первое в истории платформы соревнование по сильному ИИ Abstraction and Reasoning Challenge. Чтобы проверить способность моделей к обобщению и решению абстрактных задач, все участники суммарно решили только чуть менее половины задач. Решение-победитель справляется приблизительно с 20% из них и то девятичасовым перебором вручную захардкоженных правил (ограничение в девять часов установили организаторы).

В посте я хочу напомнить о сложностях работы с AGI, рассказать о самых интересных идеях участников, топовых решениях и поделиться мнением, что не так с текущими попытками создать AGI.

Вызов


В ноябре 2019 года создатель Keras Франсуа Шолле написал статью Об оценке интеллекта. На хабре краткий пересказ уже выложила Rybolos. Ключевой практический элемент статьи датасет для проверки способности алгоритмов к абстрактному мышлению в человеческом смысле. Просто поглядеть на него можно здесь.

Примеры задач из датасета; наверху вход, внизу ответ





Для человека эти задачи легко решаемы и напоминают блок из теста на IQ они сводятся к набору трансформаций над картинками от 30x30 до 1x1: продолжить узор, восстановить удаленный кусок, обрезать, закрасить замкнутые области, найти лишний объект и т.д.

Соревнование


Не заставило себя долго ждать и само соревнование на Kaggle на основе этого датасета, призы в котором были не самые большие в зависимости от скора $5K-8K за первое место. Для сравнения в проходившем параллельно соревновании DFDC победивший Селим Сефербеков получил полмиллиона долларов.

Тем не менее, соревнование привлекло несколько грандмастеров Kaggle: rohanrao (H20), kazanova (H20, кстати третье место в глобальном рейтинге Kaggle), boliu0 (NVIDIA), titericz (NVIDIA), tarunpaparaju, много очень сильных ребят из ODS, в том числе Влада Голубева и Илью Ларченко, которые взяли третье место. Всего до LeaderBoard дошли 914 команд.

Участникам предлагалось обучить модель на 400 задачах, в каждой из которых есть train (три-пять картинок), ответ и тест (одна-две картинки и соответственно один-два ответа). Этот датасет вручную разметил Davide Bonin на комбинации из 192 элементарных трансформаций.

Такой же по объему датасет (400 задач) предлагался для валидации (eval), впрочем, на нем можно было и обучаться особенно с учетом того, что задачи на нем отличались от обучающего. То есть сочетание трансформаций на тесте могли не встречаться на трейне, например вместо операции crop crop + resize. В лидерборде было 100 задач, при этом на каждое задание можно было выдавать три варианта ответа, достаточно чтобы хотя бы один был верным.

Интересные идеи


CNN c TensorFlow Lattice


Не попали в лидерборд.TensorFlow Lattice позволяет накладывать достаточно жесткие ограничения на фичи при обучении сеток: монотонность, взаимную важность, выпуклость, взаимное доверие, унимодальность. Это существенно увеличивает способности сеток к экстраполяции и сглаживает разделяющие поверхности. Для привлечения внимания картинка про сравнение разделяющих поверхностей разных моделей на одной задаче из блога TensorFlow Core.



В решении предлагалось взять сверточную сеть, так как CNN широко применяется для решения задач на картинках вроде выделения объектов. Идея была любопытная, но решение сработало на тесте ровно никак:



Вариационные автоэнкодеры


Заняли 131 место из 914 в лидерборде. Похожая идея наложить ограничения, но не на пространство признаков как в TF Lattice, а на пространство скрытых переменных, то есть использовать вариационные автоэнкодеры. О них на хабре есть отличная статья.

Это решение было доработано и дошло до LeaderBoard.На картинке в первой строке входное изображение, во второй правильный ответ, в третьей результат работы модели.



Генетический алгоритм



Занял 631 место из 914 в лидерборде. В этом кейсе в качестве генов реализовано одиннадцать трансформаций DSL генетического алгоритма. В ходе селекции по стратегии элитизма отбираются наиболее сильные гены:


  • Сначала случайно выбирается и запускается одна трансформация из одиннадцати. Сохраняется лучшее решение.
  • К этой трансформации случайным образом добавляются следующие, и обновляется список сильнейших генов.
  • Процесс продолжается, пока не будет найдено решение: последовательность трансформаций, приводящих к правильному ответу.

Авторы рассматривают задачу как многокритериальную оптимизацию насколько близкой получилась ширина и высота выходных картинок, совпадение цветов и положение клеток.
Несмотря на то, что такой подход что-то выбил на LB (631/914), реализация генетического алгоритма для большего числа элементарных трансформаций будет работать существенно дольше. Это, скорее всего, и стало препятствием к развитию этого решения.

Графовый подход


Занял 165 место из 914 на лидерборде. Одна из наиболее человекообразных идей
выделить на исходных изображениях объекты и далее работать с их трансформациями. Для выделения объектов применялся алгоритм k-clique-communities algorithm графовой библиотеки networkx, и справился он на отлично:







К сожалению, ноутбук с трансформациями автор не оставил, есть только выделение объектов, однако автор вошел в топ-19 на лидерборде.

Языковая модель


Заняла 592 место из 914 на лидерборде. На начало 2019 года BERT state-of-the-art языковая модель. За последние месяцы было множество её усовершенствований: RoBERTa, DistilBERT, ALBERT и другие. Здесь идея решения основывается на двух фактах:
  • Способности BERT работать с последовательностями.
  • Механизме attention, который можно научить вычленять связи даже между достаточно удаленными элементами последовательности в противовес идее о влиянии на элемент только нескольких соседних.

В некоторых задачах идея сработала, пример ниже.
Обучающие примеры: слева входная картинка, справа правильный ответ.





А вот результат работы обученной модели (справа):

Жаль, что на других задачах результаты не были такими хорошими.

Работающие решения


Эх, а как хотелось верить в способность моделей вытаскивать простые логические правила. Да и еще в интрепретируемом виде. В итоге поиск решения участниками свелся к написанию правил (трансформаций) для решения конкретных кейсов, поиску по форуму и объединению в свой ноутбук таких решений.

Например, задание про изменение цветов при сохранении размера изображения: ноутбук Zoltan, занявшего в итоге шестое место, вошел в решение Влада Голубева и Ильи Ларченко, которые заняли третье место. Решение по сути представляет объединение нескольких, в том числе публичных. Так, идеи Ильи описаны в его репозитории, он декомпозировал задачи на абстракции (цвета, блоки, маски), в терминах которых для которых реализовал трансформации, решающие 32 задания. К этому добавляются решения Влада как с похожим подходом на правилах и трансформациях, так и модель xgboost.

Пример работы решения


Обучающие примеры; слева входная картинка, справа правильный ответ.



А вот результат работы решения:

Достаточно похожим выглядит решение , взявшее второе место:
  1. Определить на входе тип задания (из шести по классификации автора) и параметры входных изображений.
  2. Иногда упростить задание например, поменять один цвет или повернуть объекты.
  3. Перебирать в цикле различные трансформации (реализовано 51) и их комбинации чтобы выбрать три максимально близкие к ответу картинки.
  4. Выполнить преобразования, обратные тем, что были на шаге 2, к трем кандидатам.
  5. Иногда имеет смысл сделать аугментацию например, из исходных примеров сделать задачи монохромными или только с одной формой.

Чемпион и 10 000 строк кода


Первое место занял icecuber, который захардкодил 100 правил из обучающего датасета и 100 правил из теста, выделил 42 основных трансформации, добавил аугментацию данных и жадный перебор вариантов с кучей технических трюков для ускорения (например, часть комбинаций трансформаций приводит к одинаковому результату, здесь можно сэкономить) с остановкой при достижении четырех трансформаций на задачу. Cамо решение и его описание.



Что в итоге?


На фоне вала статей и выступлений на конференциях A* об успехах в задачах создания сложных моделей по нескольким примерам результаты соревнования оказались совершенно неожиданными и обескураживающими.

В ноябре 2019 мне посчастливилось посетить ICCV2019 в высокотехнологичном Сеуле, где каждый второй доклад был посвящен задаче ZSL. Были ожидания, что в соревновании ARC достаточно применить одну из раскрученных в научном сообществе техник. Может, я был невнимателен, но, к своему разочарованию, не увидел среди решений участников такого подхода.

Так как уже в процессе соревнований участники делятся идеями и наработками, участие в челлендже казалось отличным способом узнать, какие подходы сейчас на переднем крае в области создания сложных моделей с минимальной обучающей выборкой или без таковой: zero-shot learning (ZSL), one-shot learning, few-shot learning, prototype learning и domain shift. Конечно, перечисленные проблемы подразумевают изменение доменной области, а не самой задачи классификация остается классификацией. Но это самое проработанное направление в части обобщения моделей.

Сами мы решили попробовать GAN-архитектуру поверх feature extractor, которая у нас так и не зашла. Однако, примерно за три-четыре недели до конца соревнования стало понятно, что выигрывают решения на правилах. Обсудив внутри, мы пришли к выводу что, потратив кучу времени на написание, мы вряд ли повысим свои компетенции в современных методах, поэтому направили энергию на другие задачи.

В тысячный раз подтвердился тезис о прикладном характере машинного обучения это набор инструментов, который надо уметь применять четко понимая задачу. В то же время бессмысленно применять даже самые крутые инструменты к непонятной задаче. Можно провести аналогию со станком, ЧПУ и 3D-принтером: несмотря на то, что область применения на каждом этапе растет, пока даже близко нет волшебной палочки, способной создать абсолютно любой предмет.

Чтобы обучить машину, мало придумать ей абстрактный язык (DSL или набор трансформаций), придумать функцию потерь и показать пару примеров. Челлендж прошёл, но осталось разочарование: то, что маркетологи до сих пор продают как AI, на поверку оказывается набором инженерных хитростей. Флёр волшебства окончательно растаял.
Подробнее..

Event2Mind для русского языка. Как мы обучили модель читать между строк и понимать намерения собеседника

18.06.2020 18:21:58 | Автор: admin
Умение модели распознавать намерения собеседника, то есть понимать зачем человек совершил то или иное действие, применимо в большом числе прикладных NLP-задач. К примеру, чат-ботам, голосовым помощникам и другим диалоговые системам это позволит эмоционально реагировать на высказывания собеседника, проявлять понимание, сочувствие и другие эмоции. Кроме того, задача распознавания намерения это еще один шаг на пути к пониманию человеческой речи (human understanding).



Уже было предпринято несколько попыток решить данную задачу в той или иной форме. Например, на NLP-progress публикуются последние достижения в области commonsense reasoning. Слабость большинства существующих моделей заключается в том, что в их основе лежит supervised подход, то есть им требуются большие размеченные датасеты для обучения. А в силу специфичности задачи разметка часто бывает весьма нестандартной и достаточно сложной.

Для английского существует ряд корпусов и benchmarkов, а вот для русского языка ситуация с данными намного печальнее. Отсутствие размеченных данных для русского часто является одним из основных препятствий, которое мешает русифицировать работающие английские модели.

В этом посте мы расскажем, как мы создали датасет для задачи Common Sense Reasoning в одной из ее возможных формулировок, предложенной в статье event2mind, а также адаптировали английскую модель event2mind от AllenNLP для русского языка. Для начала немного расскажем, что же из себя представляет задача Common Sense Reasoning.

На самом деле, правильнее было бы рассматривать это как целое направление задач, направленных на распознавание намерений и эмоций действующего лица. Единой формулировки у нее нет, и в данном посте мы возьмем за основу вот такой ее вариант, предложенный авторами event2mind: по короткому тексту в свободной форме, содержащему некоторое действие или событие (например, PersonX eats breakfast in the morning), определить намерения субъекта (X wants to satisfy hunger), его эмоции/реакции (X feels satiated, full) и возможные эмоции/реакции других участников события, если таковые присутствуют. Рисунок 1 это наглядно иллюстрирует.

Рисунок 1. Задача Commonsense Reasoning по короткому тексту-событию определить намерения, эмоции/реакции субъекта и эмоции/реакции окружающих


В оригинальной английской статье авторы предложили модель event2mind для решения этой задачи, а также большой размеченный корпус для ее обучения для английского языка. Нашей задачей было русифицировать эту модель, адаптировав для русского языка. Данную модель мы хотели потом встроить в чат-бота, чтобы научить его понимать намерения пользователя и правильно реагировать на эмоции. Для этого мы собрали датасет для русского языка, в формате, аналогичному английскому, а также обучили и протестировали несколько моделей архитектуры event2mind на собранных данных.

Данные, данные и еще раз данные


Итак, нашей задачей было собрать корпус размеченных текстов в свободной форме в формате, пригодном для обучения event2mind. Для простоты дальше мы будем называть такие короткие тексты просто событиями. При этом мы старались максимально расширить common sense reasoning кругозор модели, собрав события на самые разные темы из повседневной жизни.

Часть первая. Crowdsourced corpus


На первом этапе нам предстояло собрать достаточное количество сырых событий для последующей разметки. За основу мы взяли три источника данных:
  1. Короткие посерийные описания сериалов и мыльных опер. Мы вручную отобрали 50 сериалов с сюжетами из повседневной жизни, такие как Друзья, Секс в большом городе, Санта-Барбара, Универ, Кухня и другие. При этом мы старались выбирать сериалы о повседневной жизни с сюжетами на общие темы. Фантастика или профессиональные сериалы нам не подходили, так как они содержат очень много специальной лексики, и события там из своей специфичной области. Вы представляете, что может выучить модель, обученная на Докторе Хаусе или Звездном пути? Еще начнет подозревать у всех волчанку и сыпать рассказами о сражениях с инопланетянами.
  2. Краткие содержания книг. Суммарно нам удалось набрать краткие содержания 1512 книг.
  3. Тексты из SynTagRus, который является частью Русского Национального корпуса и содержит художественные тексты вместе с новостями.


На следующем шаге мы извлекли события из собранных текстов. События для тренировки event2mind можно определить как комбинацию глагольного предиката с входящими в составляющую глагола аргументами. Для поиска подобных паттернов был использован синтаксический парсер UdPipe, с помощью которого мы выделяли в текстах паттерны вида глагол + зависимые слова в синтаксическом дереве, как например на рисунке 2, которые удовлетворяли одному из следующих правил:

  • nsubj + root + obj
  • nsubj + root + iobj
  • nsubj + advmod + root
  • nsubj + root + case + obl
  • etc.


Рисунок 2. Синтаксические паттерны, использованные для извлечения событий из текстов



Отобранные события обезличиваются. По аналогии с оригинальным event2mind все действующие лица и именованные сущности были заменены на единообразные PersonX, а также PersonY и PersonZ, если в предложении упоминается более одного действующего лица. Для распознавания именованных сущностей (Named Entity Recognition) и дальнейшей замены мы вновь воспользовались UdPipe: в событиях, которые отвечают паттернам выше мы деперсонилизировали токены, помеченные тегами PROPN или PRONOUN. В завершении мы исключили события, которые не содержат одушевленных субъектов. Например, по этому критерию было отсеяно предложение Идет дождь. В итоге в корпус вошли только события с одушевленными именованными сущностями (person named entities).

После деперсонализации и фильтрации мы воспользовались частотным анализом и расстоянием Левенштейна для отобора наиболее распространенных событий и фильтрации нестандартных примеров, которые встретились лишь единожды. Во-первых, мы взяли все события, которые встретились в первоначальной выборке больше одного раза. Для оставшейся части данных мы посчитали попарные расстояния Левенштейна $L(phrase_1,phrase_2)$, ), отобрали пары, для которых оно не превосходило 5 и из каждой пары взяли более короткое предложение. При таком методе мы руководствовались следующим соображением: если для пары событий их расстояние Левенштейна мало (в данном случае порог 5), то эти предложения отличаются весьма незначительно, например, в роде глагола или прилагательного. Фактически это вариации одного и того же события. А более короткое предложения из пары мы выбирали потому, что оно скорее будет содержать начальные формы слов (они чаще короче, хотя и не всегда).

После сбора данных события предстояло разметить, выделив в них намерения PersonX, его эмоции/реакции, а также эмоции/реакции PersonY и PersonZ, если таковые присутствуют. Для этого мы создали задание в Яндекс.Толоке. Пример из него вы можете видеть на рисунке 3. Для каждого события мы спрашивали разметчиков:

  • содержит ли оно осмысленное событие;
  • можно ли по тексту события понять намерения действующего лица;
  • можно ли по событию понять эмоции/реакцию действующего лица;
  • может ли это событие вызвать реакцию окружающий.


Рисунок 3. Пример задания из Яндекс.Толоки



Для облегчения труда толокеров мы подготовили для них подсказки ответы пробной модели event2mind, обученной на переведенном английском корпусе event2mind. Так что им оставалось только верифицировать ответы черновой модели и по возможности предложить свои.

Тут стоит оговориться, что поскольку переведенные данные получились достаточно сырыми, то обученная на них модель оказалась слабой. До полноценной модели она не дотягивала, но в некоторых случаях ей достаточно точно удавалось угадывать эмоции и намерения субъектов.

В итоге нам удалось собрать 6756 событий на различные повседневные темы.

Часть 2. Translated English corpus


Помимо того, что мы использовали размеченный русский датасет, мы частично перевели английский корпус с помощью переводчика Google, а затем отфильтровали и откорректировали результат. Почему это было необходимо? Понятно же, что автоматический перевод несколько хуже исходно русских данных, размеченных вручную.

Дело в том, что разметка подобного датасета трудоемкое дело, требующее большого количества ресурсов, денег и средств. У нас просто не было возможности разметить корпус, по размерам сопоставимый с английским, который состоит из 46 тысяч примеров. Поскольку собранный на русском датасет оказался меньшего размера, мы решили оценить, хватит ли такого объема данных для обучения. Для этого мы обучили английскую модель на частях оригинального корпуса и измерили, как меняется качество в зависимости от размера обучающего датасета. Результаты приведены в таблице. Качество для намерений (intent) и эмоций/реакций (react) оценивалось, по аналогии с оригинальной статьей, по метрике recall@10 на валидации. recall@10 отражает долю случаев, когда истинный ответ golden standard попадает в топ-10 предсказаний модели. Метрика меняется от 0 до 1, чем больше, тем лучше.

Таблица 1. Зависимость качества английской модели от размера корпуса для обучения



Сразу можно сказать, что 5000 примеров недостаточно для полноценного обучения модели. Однако уже при 30000 примеров, loss и recall практически не отличаются от результатов на полном объеме данных. Получается, что размеченных нами 7000 примеров не хватает для обучения модели и необходимо каким-то способом увеличить размер обучающей выборки.

Для этого мы подготовили дополнительный корпус, полученный из английского с помощью автоматического перевода Google Переводчиком. Как уже отмечалось выше, при автоматическом переводе всего корпуса некоторые переводы оказывались некорректными или полностью теряли смысл. Поэтому мы отобрали ту часть английских данных, которая переводилась наиболее адекватно. Изначально английский корпус собран из нескольких источников: ROC Story training set, the GoogleSyntactic N-grams, the Spinn3r corpus и idioms. При этом предложения из некоторых источников оказались проще для перевода, чем из других. Например, адекватный перевод идиом без ручной правки оказался не под силу компьютеру. Поэтому мы взяли только примеры из ROC-story. По результатам оригинальной статьи (см. таблицу 2), у этого источника коэффициент согласованности аннотаторов (Cohen's kappa coefficient), равный 0.57. А это, скорее всего, свидетельствует о том, что события оттуда проще для понимания и разметки, а значит меньше подвержены ошибкам при переводе.

Таблица 2 Данные и Cohen's kappa coefficient для разных источников в английском корпусе


После этого мы отфильтровали отобранные данные, удалили оттуда примеры, в которых после перевода остались английские слова и примеры, которые были переведены некорректно. Оставшаяся часть была отредактирована редакторами.

Стоит отметить, что несмотря на все уловки, фильтрацию и редактуру, переведенный корпус все равно отстает по качеству предложений от размеченного толокерами датасета.

В итоге нам удалось набрать 23409 переведенных событий, а объем объединенного корпуса с учетом размеченной русской части составил 30165. Этого, как мы выяснили во время экспериментов, должно было хватить для обучения русской модели.

А теперь к экспериментам!


Итак, данные собраны, пора переходить к обучению модели и экспериментам. Модель event2mind представляет собой нейросетевую архитектуру вида encoder-decoder с одним энкодером и тремя декодарами для каждого вида предсказаний (см. рисунок 4): намерение субъекта, его эмоции/реакции и эмоции/реакции других участников события, если таковые имеются (subjects intent, subjectss reaction и others events participants reactions). Исходные предложения изначально векторизуются с помощью одного из методов векторных представлений слов (например, word2vec или fasttext) и кодируются с помощью энкодера в вектор $h^E\in \mathbb{R}^H$. А затем с помощью трех RNN декодеров генерируются предсказания. Благодаря этому модель может генерировать ответы даже для намерений и реакций, которые она до этого не видела.

Рисунок 4. Архитектура модели event2mind


Для экспериментов мы использовали объединенный корпус для русского языка, размеченную и переведенную части. А чтобы сделать распределение русских и переведенных примеров более равномерным, мы дополнительно перемешали данные. Отметим, что мы также попробовали обучить модель только на размеченных данных, но из-за маленького объема датасета, она показала очень плохие результаты. Мы протестировали различные слои в энкодере LSTM и GRU, а также попробовали различные векторные представления fasttext и word2vec с RusVectores. Результаты приведены в таблице 3, результаты по intentам и reactам, как и ранее считались по метрике recall@10.

Таблица 3. результаты моделей для русского языка, intent и react оценивались по recall@10


Итак, какие выводы можно сделать из результатов экспериментов? Во-первых, word2vec embeddings оказались немного лучше, чем fasttext. При этом fasttext embeddings, обученные на ruscorpora показали себя лучше обученных на araneum. Во-вторых, можно отметить, что при использовании word2vec, GRU в энкодере оказывается лучше LSTM. И наконец, лучшая модель (areneum word2vec + GRU) практически повторяет результаты для английского языка.

И напоследок посмотрим на реальные примеры!





Весьма неплохо! Намерения выглядят весьма правдоподобно и действительно отражают какие-то общечеловеческие понятия и знания. А вот с эмоциями/реакциями модель справилась несколько хуже, они получились более примитивными и однообразными. Возможно, это связано с тем, что эмоции зависят от большего объема текста и короткого текста-события недостаточно, чтобы правильно его определить.

Вместо заключения


Итак, мы создали русскоязычный корпус для обучения модели event2mind. Помимо этого, мы провели эксперименты, которые показали, что архитектура event2mind работает для русского языка, который по своей природе грамматически сложнее английского. Несмотря на сложность русского языка, удалось достичь сравнимого с английским качества. Лучшая модель и данные выложены в репозитории.



Такой большой проект стал возможен, только благодаря совместным усилиям нашей команды. В адаптации event2mind для русского языка также принимали участие alenusch и onetwotrickster.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru