Не поддавайтесь заблуждениям

Скучное введение

Недавно я прочитал эту трилогию книг (которая, кстати, потрясающая, практичная, грубая и мгновенная классика). Есть очень хорошая аналогия, которая так или иначе пронизывает всю трилогию (я просто не мог не поделиться ею):

Подобно охотникам в «темном лесу», цивилизация никогда не может быть уверена в истинных намерениях инопланетной цивилизации. Чрезвычайное расстояние между звездами создает непреодолимую «цепочку подозрений», когда любые две цивилизации не могут общаться достаточно хорошо, чтобы уменьшить недоверие, что делает конфликт неизбежным. Оставить примитивную цивилизацию в покое - не вариант из-за экспоненциального прогресса технологических изменений, а обнаруженная вами цивилизация может легко превзойти ваш собственный технологический уровень через несколько столетий и стать угрозой. Если вы обнаружили цивилизацию, значит, вы также подтвердили, что эта цивилизация в конечном итоге сможет вас обнаружить. Следовательно, в интересах каждой цивилизации превентивно нанести удар и уничтожить любую развивающуюся цивилизацию, прежде чем она станет угрозой, но без раскрытия их собственного местоположения для более широкой вселенной, что и объясняет парадокс Ферми.

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

Меня действительно поразило, что подобная аналогия действительно хорошо переносится в реальную жизнь и как бы объясняет статус-кво во многих областях. Можно сказать, что ML в целом сейчас становится Темным лесом. Давным-давно социальные сети превратились в Темные леса, где каждый сигнализирует о добродетели (или просто использует его как мессенджер, лол), и у каждого есть очень крутая искусственная версия себя (я не использую социальные сети, кстати). В отличие от социальных сетей, которые строго наказывают всех людей, которые осмеливаются честно выражать свое истинное «я» на них, ML / tech менее наказуемы (пока, но если вы внимательно прочитаете вам NDA / компенсацию / IP часть вашего соглашения по английскому праву - вы можете подумать иначе ).

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

Я давно не писал в этом блоге. Я был озабочен многими вещами, и одним из них было создание простой в использовании / доступной модели / набора данных для преобразования речи в текст. У меня также был первый приличный отпуск с 2015 года, но это не будет темой этого поста. Также в моей жизни был ряд практических «проблем», связанных с переездами / арендой офиса / решением некоторых базовых вопросов. Звучит немного, но требует времени и внимания.

Изначально я хотел отложить любые сообщения в блоге, связанные с STT, до тех пор, пока мы не выпустим предварительно обученные модели / не выпустим версию 0.6 или 0.7 нашего набора данных (теперь это 0.5) / не сделаем очень классную вещь, которую мы планируем сделать в будущем (пока не буду раскрывать, но можете догадываться). Но я понимаю, что это, вероятно, займет слишком много времени, так что давайте немного повеселимся! Мы очень близки к завершению наших моделей, набора данных и этой классной штуки, но по одному за раз.

В любом случае, сейчас я просто хотел бы рассказать вам о моем общем опыте работы над этой штукой - работающей российской модели STT и огромном наборе данных STT - и о том, как это и ML в целом напоминают Темный лес:

TL; DR;

  • Технология - это темный лес. Пока этого не произойдет. Но потом снова. Это циклично;
  • Академический мир - это своего рода Темный лес
  • Каждый сигнализирует о добродетели. Сигнал в бумагах очень слабый, если только это не прорывная газета раз в год. В конце концов я пришел к выводу, что 95% текущих научных работ по машинному обучению - это не что иное, как построение карьеры. Просто читайте между строк, ищите идеи. Люди, которые читают просто код и / или просто аннотации и / или ищут гиперпараметры в статьях, циничны, но в конце концов они правы. Раньше у меня был проблеск надежды, но теперь я отношусь к нему более цинично. Конечно, иногда в газетах встречаются по-настоящему крутые идеи - но 95% хрени наверху - это необходимое зло ?;
  • Машинное обучение становится темным лесом
  • Точнее, он следует технологическому циклу, и теперь он входит в фазу Темного леса. Вспомните, как все были поражены тем, насколько все было открыто (открытые архитектуры, воспроизводимые эксперименты, предварительно обученные сети). Теперь тенденция сместилась к индустриализации, огромным сетям, AutoML, обучению с самоконтролем (что, кстати, хорошо) и строительству огороженных садов. Это хорошо, что машинное обучение действительно полезно и доступно для развертывания (в отличие от пузырей криптовалюты, пузырей производных финансовых инструментов и т. Д.) В реальной жизни, но похоже, что люди все больше разделяются на практиков / контрольный показатель 0,01% SOTA pushers / хардкорные инженеры C ++. Потрясающий плавильный котел идей, по крайней мере, на данный момент, кажется менее выраженным;
  • И напоследок - STT - тоже своего рода мягкий Темный лес
  • Поскольку это требует большого объема данных (есть несколько классных идей, таких как совместное обучение STT / TTS, но я считаю, что что-то похожее на обучение со слабым контролем, то есть автоматическая псевдо-маркировка или смешанное сопоставление, будет работать в сценарии «в дикой природе» Он уже работает, кстати, в оффлайне) неудивительно, что в основном это делают крупные корпорации. Со всеми их преимуществами - приспособление к идеализированным «неограниченным» данным, построение изолированных экосистем, использование в 10 раз больше ресурсов, чем необходимо. В системе нет мотивации создавать простые / надежные / воспроизводимые системы, особенно для языков, отличных от английского. Это отражено в статьях по теме. Конечно, вы можете сказать, что существуют wav2letter ++ / kaldi / esp-net, и они имеют открытый исходный код, и я просто отстой в ML / кодировании. Да, правильно, пожалуйста, используйте их, продолжайте. Но можно ли на них положиться? Можете ли вы действительно сказать, что не так с вашей нестандартной моделью wav2letter ++, если вы не можете усвоить всю кодовую базу C ++? Если вам это нужно вчера и у вас нет 6 месяцев, чтобы разобраться в проекте, на который потребовалось 10 человек в год писать? Конечно, если вы являетесь разработчиком «гуру ниндзя Rockstar 10x», это может не относиться к вам xD;

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

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

Технологические циклы

Технология - это темный лес. Пока это не так. Позвольте мне объяснить, что я имею в виду. Если вы из СНГ, то пробовали ли вы когда-нибудь размещать что-нибудь оригинальное на habr.com (просто прочтите русскоязычные комментарии здесь или здесь)? Все, о чем вы можете с гордостью сказать: Я создал это и считаю, что это полезно! Хочу поделиться этой крутой штукой! . Если вы не из СНГ, вероятно, то же самое можно сказать и о Reddit, я не знаю, пожалуйста, напишите мне, если у вас есть опыт.

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

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

Хорошо, но какое это имеет отношение к технологиям и Темным лесам? Видите ли, если 95% того, что вы видите, это то, как происходит реальный прогресс? Конечно, если 1000 инженеров будут работать над процессорами нового поколения в течение 2 лет, что-то произойдет независимо от того, насколько они эффективны. Но держу пари, что у вас не будет 1000 инженеров и 2 года. Тебе нужен твой результат вчера.

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

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

Укушенный ошибкой SOTA

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

Читая статьи по машинному обучению, они все больше и больше чувствуют себя как опубликованные или погибающие / гоняющиеся за 0,01% в какой-то нечеткой устаревшей академической таблице лидеров. Ставить галочки вместо того, чтобы делать что-то полезное.

Наверное, тебе уже надоели мои разглагольствования, позвольте мне быть более конкретным. Уважаемые люди пишущие статьи! Мне есть к чему прислушиваться. Точнее несколько костей:

  • Что с тем фактом, что ни в одной статье не публикуются кривые сходимости?
  • Почему? Кого волнует достижение + 0,05% (поскольку ML является случайным) в каком-то устаревшем тесте, не относящемся к дикой природе, за счет использования в 10 раз больше вычислений и / или использования в 10 раз большего количества часов графического процессора в вашем вычислительном кластере? Я понимаю, что машинное обучение развивается циклично: сначала кто-то достигает + 0,05% за счет увеличения вычислительной мощности в 10 раз, затем кто-то оптимизирует его, но почему бы не быть более открытым в этом вопросе? Также иногда стоит довести все свои эксперименты до конца, но обычно в первые эпохи вы видите, что что-то не летает.

  • Почему вы копируете и перетаскиваете непонятные математические формулы с бумаги на бумагу, даже если ваш вклад не имеет ничего общего с этими формулами?
  • Не говорите мне о том, что «каждая статья будет самодостаточной, и любой новичок поймет все с одной статьи». Так не работает. Почему бы просто не написать вроде «мы используем эту потерю, изобретенную этим парнем здесь, реализованную этим парнем здесь, и да, мы просто используем эту реализацию для всего, и вот наш Dockerfile!». Это продуктивно. Но, вероятно, тогда большинство статей будет звучать так: «Гм, я пришел на работу, просто использовал from utils import *; монолитное чудовище наших внутренних оболочек и просто изменил некоторые настройки - отправил их на наши 1000 графических процессоров - и альт, новый результат SOTA!» . Звучит не очень сексуально, правда?
  • Неизвестно, что вы на самом деле построили и с чего начали
  • Неясно, какие элементы имеют решающее значение для вашей системы, а какие можно урезать. Если вы начали с какого-то фреймворка черного ящика и просто добавили что-то поверх этого - просто скажите это. Или сделайте надлежащие тесты на абляцию. Или просто покажи свой путь. Просто будь откровенен. Не прячьтесь за громкими словами.

  • Расплывчатость в отношении обобщения своего подхода
  • Делать что-то на своем ноутбуке на MNIST в настоящее время немного неприятно (да, вы можете приспособить любую достаточно большую дерьмовую сеть к чему угодно, имея достаточно времени и денег), но, по крайней мере, это кажется честным. Но я бы никогда не поверил, что люди, у которых над документом работают 4–5 человек, не имеют OOD (вне набора данных) / частных / дополнительных данных для тестирования своей модели. Бумага DeepSpeech, вероятно, является лучшей иллюстрацией этого. Они просто показали, насколько производительность зависит от добавления дополнительных данных. Даже если они не могут поделиться этими данными. Если то, что вы делаете, работает только с идеальным небольшим набором данных и требует в 10 раз больше вычислений и времени - это бесполезно. Нет, вы не продвигаете передовые технологии, если нет принципиально новой характеристики того, что вы сделали. Ах, может быть, вам небезразлична и воспроизводимость? Но, кхм, сделать ваш вклад воспроизводимым и доступным для публики может потребоваться в 10 раз больше работы. Так что лучше просто опустить все, что указывало бы вашим соученикам в правильном направлении. Потому что в противном случае вы уязвимы, и Темный лес нанесет удар. Также не заставляйте меня начинать с подхода "сложить и смешать 100 похожих вещей". Если вы действительно смешиваете несколько разных вещей, то есть RNN + регулярные выражения + несколько линейных регрессий, каждая из которых решает небольшую подзадачу, это очень круто. Но просто складывать 100 подобных сетей нельзя.
  • Еще одна разновидность того же самого - гиперпараметрическая стабильность.
  • Гиперпарамы обычно заслуживают небольшого раздела в середине статьи. Но иногда на их правильную настройку уходит много времени (и это даже может быть важнее, чем ваше новенькое улучшение SOTA). Так почему бы не рассказать подробнее, как вы их нашли? Сколько требуется вычислений? Можно ли масштабировать для других наборов данных? Они стабильны?

Пожалуйста, сделайте что-нибудь полезное! Также, в частности, у меня были следующие проблемы с бумагами STT:

  • Все новые интересные подходы к обучению без учителя (wav2vec, циклическое обучение и т. д.)
  • Выглядит очень круто, но зачем показывать «прогресс» на некоторых случайных небольших наборах данных? Почему бы просто не масштабировать с помощью динамиков в LibriSpeech? Запустите тест - масштабируется ли он до X% динамиков из LibriSpeech, и все! Почему бы не экстраполировать, насколько эффективен ваш метод вычислений, даже с помощью вычислений «на заднем плане»? Конечно, неконтролируемые / самоконтролируемые / частично контролируемые методы могут быть на порядок медленнее, но как насчет компромисса с затратами на аннотации? Это не сложные дела, а просто здравый смысл. Но, видите ли, утверждение, что «мы достигли чего-то почти без надзора, но в реальной жизни это даже менее практично, чем под присмотром», совсем не звучит сексуально;
  • Несколько замечаний о Wav2letter
  • Wav2letter бумажный - это круто. Такой обманчиво простой и красивый… как глоток свежего воздуха. Я был одной из причин, по которой я решил попробовать создать систему STT. Но подождите, на реальных данных это просто не подходит, как обещали! Может, нужно поставить его на 30 дней на 8 GPU V100? Я полностью понимаю, что на самом деле вы можете просто тренироваться дольше, чтобы миниатюризировать модель, но такие статьи (они используют ~ 150 млн параметров вместо ~ 30 млн для достижения аналогичных результатов) как бы показывают, что все немного сложнее;
  • Огромные сети с высокой степенью регуляризации
  • Все статьи с описанием больших сетей, активаций GLU и 0.6 выпадения. Вы можете разместить любую сеть на чем угодно. Действительно. Они такие гибкие. Но вы знаете, время и объем вычислений могут отличаться в 10 раз. И будет ли он работать с реальными / грязными данными;
  • Все статьи, посвященные изучению пользовательской предварительной обработки вместо STFT / MFCC или чего-то подобного
  • Может я просто идиот, но мы пробовали такие вещи, и они работали, но даже на игрушечных данных данные сходились намного медленнее. Учитывая, что на самом деле одна запятая в такой хрупкой вещи, как предварительная обработка, может стать препятствием, отсутствие опубликованного кода от авторов статей - это странно (да ладно, если вы потратили много времени на настройку своей предварительной обработки, и вероятно, это всего лишь 50 строк кода, тогда почему бы просто не поделиться им? Сообщество выиграет, и вы получите повышение PR). Есть классная статья - SincNet, где автору пришла в голову крутая идея и он даже опубликовал практичный код, который можно протестировать на своих данных - нам еще предстоит его попробовать. Также - как показали некоторые статьи (1) 2 3 4) - иногда даже не требуется сложная структура и само обучение, чтобы модель работала;
  • Выполнение всего до конца мантры
  • Это так круто, когда вы можете просто поместить все в одну сеть в один фреймворк (а он может быть даже независимым от фреймворка) и просто нажать .forward()! Тогда вам понравятся всевозможные крутые вещи - например, портирование на TensorRT, использование ONNX и т.д. отдельный этап постобработки с использованием другого языка / стека / и т. д. Это бесполезно. Это просто новинка. Может, вместо этого поможет добавление дополнительных LM-потерь?

Собака ест собаку

Вероятно, Dark Forest - это немного преувеличение, но некоторые наблюдаемые поведения были похожи по духу.

Обычно я не из тех, кто хвастается тем, сколько «предложений работы в секунду у меня есть», или «сколько рабочих мест у меня есть на данный момент», или «сколько денег в секунду я зарабатываю» (все это напрасно и недостойно) или любое неприятное дерьмо вроде этого, но оставь меня сейчас на пару анекдотов.

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

  • Когда мы опубликовали наш набор данных на habr.com, 33% комментариев были конструктивными (т. Е. Кодирование данных, участие в соавторстве и т. Д.), А 66% были о том, какие мы засранцы:
  • Мы совершили преступление против правообладателей книг / видео / видеозаписей, и мы должны упасть замертво и немедленно понести наказание! Да, верно, Imagenet был собран аналогичным образом, но ни у кого не возникло проблем с его использованием. Потому что прогресс и добросовестное использование. Я согласен, что это серая зона, но для получения более подробной информации просто прочтите комментарии;
  • Мы должны были публиковать данные под лицензией Public Domain по причинам. Потому что частная компания должна договориться с авторами об использовании данных в коммерческих целях для продолжения передачи сигналов о добродетели. Вы не можете просто сказать авторам, чтобы они пошли прогуляться. cc-bc-by фактически позволяет любым людям, работающим на благо общества, использовать данные, и мы уже несколько раз помогали исследователям в этом;
  • Часто люди говорили мне, что то, что мы делаем, нельзя делать из-за того, что Google или Яндекс. Потому что Темный лес. Да ладно, посмотрим при сравнении бенчмарков xD;
  • К нам трижды обращались с расплывчатыми предложениями присоединиться к некоторым командам, а в одном случае мы даже могли сотрудничать, чтобы улучшить наш набор данных, что очень круто! Темный лес в том, как один из этих парней рекламировал свою компанию. После некоторых запросов мы как бы поняли, что 5000 часов аннотаций, которыми он хвастался, существуют только теоретически, и единственной целью нашего общения было устранение потенциального конкурента в зачаточном состоянии. Ага, как этот парень. Мы можем потерпеть неудачу, и мы можем проиграть то, что мы делаем, наш набор данных может быть полон мусора, но (i) мы не идиоты (ii) мы действительно верим, что жизнь - это не игра с нулевой суммой для перемен;

Сделайте свою сеть в 4–5 раз быстрее. Но сначала сделайте это в 4–5 раз медленнее.

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

Вернемся к этой диаграмме:

Мы узнали следующие полезные вещи о STT. Некоторые из них могут быть довольно очевидными в ретроспективе (теперь вы можете официально начать извергать свой яд прямо сейчас, как все это было очевидно с самого начала для вас 7 лет назад):

  • Русский язык:
  • Ваш CER легко будет вдвое больше английской модели с такими же чистыми данными;
  • Ваш WER может быть в 2–3 раза больше в зависимости от постобработки и степени чистоты ваших данных;
  • Обобщение:
  • Вы должны перекрестно проверить свою сеть в разных доменах. Тогда вы увидите реальную производительность вашей модели в дикой природе;
  • Сложность вашей области - это шум x разнообразие голоса x разнообразие словарного запаса;
  • Это будет смягчено, когда у вас будет больше данных, но на практике вы можете подумать, что если у вас есть один шумный домен, на другом шумном домене у вас будет + 10pp CER;
  • Ваша модель станет лучше, если у вас будет больше аннотаций. Обратитесь к статье 2 DeepSpeech для получения точных цифр - но, вероятно, аннотация x5 - x10 может дать вам минус 7–10pp CER;
  • Имеет значение качество аннотации и шум домена. Если при идеальной четкости данных в сети без переоборудования может быть 3–4% CER, то, вероятно, вы можете экстраполировать, что 5–10% CER на более зашумленные данные в естественных условиях достижимы, а очень зашумленные данные будут еще хуже. ;
  • Ваша сеть:
  • CNN немного хуже, чем GRU / LSTM аналогичного размера, но в 2–3 раза быстрее (по крайней мере);
  • Разделяемые свертки + узкие места могут сделать вашу модель в 4–5 раз легче и в 3–4 раза быстрее (идея очень похожа на эту бумагу, их конкретная модель действительно не сработала для нас, но модель с аналогичными идеями сработала). Такая сеть требует в 3 раза больше времени для обучения и меньше переобучений;
  • Использование 4-кратного или 8-кратного масштабирования последовательности (вероятно, с BPE, мы еще не достигли аналогичной производительности с 10k BPE) на самом деле не ухудшает производительность, но ускоряет ваше обучение в 2–3 раза;
  • Расширенные свертки делают вашу сеть примерно в 2 раза медленнее, но CNN перестают пропускать слова (в отличие от RNN);
  • Если вы используете CNN, использование пропускаемых соединений / остаточных сетей - очевидный выбор дизайна;
  • Емкость вашей CNN, вероятно, должна быть в 2–4 раза больше, чем у wav2letter;
  • Попробуйте использовать SRU вместо LSTM / GRU (мы еще не пробовали);
  • Вы можете использовать любую предварительную обработку и сеть. Единственная разница будет - как долго вам придется его тренировать при достаточном количестве данных;
  • Обучение вашей сети:
  • Объединяйте фрагменты аудио одинакового размера вместе. Это может ускорить ваше обучение до 2 раз;
  • Сделайте свой конвейер предварительной обработки максимально простым - почему бы просто не прочитать двоичные данные int16 с диска вместо преобразования данных на лету ?;
  • Сделайте ваш конвейер аугментации максимально эффективным и дешевым;
  • Оптимизируйте свое оборудование. SSD-хранилище сейчас очень дешево;
  • Наличие нескольких источников аннотации (например, графемы + фонемы) может помочь избежать плато. Но это требует более подробного исследования;
  • Дополнения
  • Критически важны для больших сетей. Помогло избежать плато для больших сетей. Не так важно для небольших сетей;
  • Уменьшить разрыв в обобщении;

PS - поиск луча не нужен?

Первоначально опубликовано на https://spark-in.me 12 августа 2019 г.