Если честно, не планировала писать постов ни сейчас, ни в обозримом будущем. И уж тем более не собиралась писать про нейронные сети. Но… Угораздило меня нелестно отозваться о статье https://pikabu.ru/story/4_fakta_o_neyronnyikh_setyakh_637309... , отметив (наверное, излишне самонадеянно), что я использую нейронные сети в работе уже лет пятнадцать. Автор, @WhiteBlackGoose, почему-то решил, что мой опыт «плод моего больного воображения» и прямо-таки настойчиво интересовался подробностями. Ну что ж, не знаю, насколько полезен и интересен будет частный опыт решения узких задач, но попробую прояснить кое-какие моменты.
С чего начинать, не имею понятия, поэтому начну с начала. С самого-самого начала. Предупреждаю сразу, полезного в посте будет… наверное не будет. Это всего лишь краткая история моего знакомства с аппаратом нейронных сетей, просто, для того, чтобы собрать мысли в кучу, да и количество заявленных лет, стоит проверить. К тому же, как мне показалось, так будет проще потом пояснить особенности применения нейронных сетей для решения задач медицинской диагностики.
С нейронными сетями я впервые столкнулась на четвертом курсе. Ну то есть как столкнулась, столкнули меня, скорее. Я уже с третьего «работала на свой будущий диплом», то есть точно знала, к какому руководителю пойду, примерно представляла тему (если в общем – диагностика тромбозов), и планомерно набирала материал. Тематику курсовых мне тоже согласовывали так, чтобы перекликалась с будущим дипломом (в рамках дисциплин, конечно). И вот, в качестве задания на очередную курсовую, мне руководитель и подкинул анализ данных с применением нейросетевых технологий.
Что такое нейронные сети, я тогда не представляла вообще, интернету предпочитала библиотеки, и как во всем этом разбираться представляла слабо. Собственно нас двое таких было, я и моя подружка. Обе у одного руководителя, у обеих похожие темы, только диагностические признаки разные. Макались мы с ней довольно долго, а потом нам одна аспирантка с соседней кафедры буквально на пальцах рассказала, как сделать простенький нейросетевой классификатор, и порекомендовала книжку. Как сейчас помню, авторы Медведев, Потемкин «Нейронные сети. MATLAB 6». И не просто порекомендовала, а дала на недельку почитать. Эту книжку я радостно отсканировала, и мы пользовались ей вплоть до диплома и даже немножко после. В интернете ее я так и не нашла (поначалу, а потом уже и не искала). В дополнение нам еще пожертвовали описание лабораторной работы (кажется, что-то про сейсмическую активность). С этим «богатым» материалом мы и начали делать курсовую. Потом еще несколько источников нашли, по большому счету, довольно бестолковых. Из полезного запомнился мануал StatSoft. Со STATISTICA я связываться не хотела, но, опуская описания команд меню, мануал представлял собой достаточно простое и дельное пояснение принципов построения и работы нейронных сетей. Среду разработки мы не выбирали (справедливости ради отмечу, что когда появилась возможность выбора, однозначно лучших альтернатив для своих задач я так и не нашла), работали в MATLAB и даже достигли кое-каких результатов.
Сейчас я понимаю, что курсовая у меня была вообще ни о чем. Я честно прошерстила все что нашла, про свертываемость крови, и выбрала шесть параметров гемостаза (наобум, ага, просто потому, что они во всех источниках встречались), выяснила для них границы нормы/патологии (гиперкоагуляции и гипокоагуляции, читай склонности к тромбозам и кровотечениям) и генератором случайных чисел по равномерному закону слепила выборку. В столбцах, чинно благородно, параметры свертывания (значения без сортировки, без ничего, сначала блок гиперкоагуляции, потом блок нормы, потом блок гипокоагуляции). Пишу сейчас, аж самой смешно. Архитектуру точно не помню, но какая-то типовая для задач классификации (кажется, сеть прямой передачи сигнала, обученная по алгоритму Левенберга-Марквардта, 1000 эпох, mse стремится к нулю… как-то так). Сеть, конечно, обучилась и успешно оттестировалась. И для курсовой этого хватило.
Диплом я тоже делала на нейронных сетях. Свою первую сеть я слегка облагородила. Поменяла обучающее множество. Да, оно все еще было на дурацких сгенерированных данных (за неимением иного), но, теперь в них, по крайней мере, добавилось случайное рассеяние и сортировка по вспомогательному столбцу (не участвующему в обучении), для того, чтобы от «блоков» избавиться и вручную не перемешивать. Архитектуры тоже пробовала разные, но выбор оптимальной был весьма умозрительным, без критериев, без оценки диагностической эффективности. Ужас, короче. Но, тогда в комиссии никто особо в вопросе не разбирался, направление считалось свежим и не заезженным, а мы были почти экспертами.
Вуз я закончила успешно и с сентября пришла работать на родственную кафедру в другом учебном заведении (но направление то же: биотехнические системы и технологии). Биологию там читал доктор медицинских наук, профессор, действующий преподаватель местного института усовершенствования врачей, в прошлом анестезиолог. На одной из конференций мы (я, мой бывший дипломный руководитель, а ныне коллега и руководитель в аспирантуре, и он) разговорились, и наш уважаемый медик загорелся идеей познакомить меня с женщиной (к.м.н.), которая собирает материал на докторскую как раз по патологиям свертывания крови. И познакомил.
Так я получила не абстрактную, а весьма конкретную задачу, и данные из формализованных историй болезней, глядя на которые у меня глаза полезли на лоб. Ничего общего с моими результатами генерации они не имели. Очень четко помню мысль – сеть работать не будет! Я ошиблась. Все получилось, но это уже другая история. Скорее всего, куда более содержательная, чем нынешняя. Во всяком случае, напрямую касающаяся выбора информативных признаков, компоновки обучающих множеств, и, конечно, особенностей реальных клинических данных как объекта исследования. Если интересно, напишу. Хотя, напишу, даже если и не интересно, ибо это (в числе прочего) и есть тот самый опыт, которым не стыдно поделиться, а я ж вроде как пообещала.
Клинические данные мне перепали в 2007 году, и, пожалуй, можно считать, что нейронные сети в работе использовать начала с этого же времени (опуская предыдущие пару лет страдания ерундой). Ну так чтоб не ТЗ от препода, а задача от врача, заинтересованного в использовании результатов работы. Так что, правильно, как оказалось, WhiteBlackGoose, сомневался. Не пятнадцать лет, а одиннадцать всего. Каюсь, грешна, приписала лишков)))
Пост сознательно не публикую в сообщество «Машинное обучение» - все-таки полезного ничего я не написала, больше воспоминаниям предавалась, а правил нарушать не хочется.
В планах рассмотреть:
1. В чем особенность данных медицинских исследований и почему для их анализа нейросети – одно из лучших решений.
2. Формирование обучающих множеств, методы выбора информативных признаков и компоновка входных матриц.
3. Что за зверь такой MATLAB и какие нейросети в нем можно создавать.
Может быть и еще что-то, посмотрим, как пойдет.