Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Грубая вычислительная сила для нежных нейронных сетей

Мнения о том, понимаем ли мы причины успешности/обучаемости глубоких нейронных сетей, расходятся. В конечном итоге, всё заканчивается спором о термине "понимаем" -- там широкий диапазон между:
-- подбираем для каждого применения структуру нейронной сети и гиперпараметры методом проб и ошибок, ибо не знаем, как их вычислить. Знаем, какая математика там работает.
-- вычисляем для каждого применения оптимальную структуру нейронной сети и параметры, ибо знаем, как вычислить. И знаем, какая математика работает в вычисленной структуре и параметрах.

Дальше нюансы, нюансы, нюансы: что один "понимает", другой обзывает "непониманием". Например, "вычисляем" можно трактовать как "запускаем эволюцию, и ждём результата". Для кого-то это вполне себе "вычисляем", а для кого-то -- замаскированный метод "проб и ошибок", не "вычисление", а "подбор" (хоть и хитрым алгоритмом). Ну, и вторая засада в "знаем какая математика работает" в результирующей "оптимальной структуре". Если эта структура была получена на выходе какого-то "эволюционного алгоритма" -- не факт, что будем понимать, что в итоге получилось. Ну, и "чему научилась сетка": если сетка не вывела формулу из первых принципов и не предъявила её -- много людей будут говорить, что "мы не понимаем, что там происходит, что выучила сетка, как и почему она это выучила". Многим нужны на выходе обучения не модели в распределённых представлениях, а (формальные -- с формулами!) теории в локальных (текстовых) представлениях, иначе они не соглашаются с тем, что "мы понимаем".

Математики нейронных сетей уже более чем хватает (кратенький обзор тут: https://vk.com/topic-44016343_33675473), но её обилие не даёт четкого ответа на поставленные вопросы -- удовлетворяющие одних ответы полностью не устраивают других, и наоборот.

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

А научный тык долог: сетки очень нежны -- учатся отнюдь не в любых руках, учатся долго, плохо работают на тех данных, которые отсутствовали при обучении. А ещё большие сетки (которые пока непонятно как делать маленькими) не лезут в память: если хочется быстро и без оптимизационных плясок, то в какой-нибудь Titan X влезает побуквенные RNN для предложений не больше половины твита. Всё как когда-то с программированием. Я помню, как большую программу оставлял компилироваться на ночь -- но программы были более-менее модульны. С сетками в плане модульности много хуже, обеспечивающий эту модульность transfer learning тоже мало предсказуем и тоже требует времени и множества попыток.

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

Я поэтому с особым вниманием слежу за развитием грубой вычислительной силы в нейронных сетях. Вот только некоторые интересные события из этой области:

1. Выпуск очередного поколения GPU от NVIDIA -- это самое незначительное событие по приросту скорости и памяти, но самое значительное по доступности (все текущие наработки просто вдруг становятся быстрее и у них с памятью становится просторней, при этом удельная цена этой мощности уполовинивается: "просто купи плату") -- http://www.pcworld.com/article/3071037/hardware/nvidia-geforce-gtx-1080-review-the-most-badass-graphics-card-ever-created.html. Сюда же я отнёс бы и разные вариации на тему FPGA, например http://www.nextplatform.com/2016/03/14/intel-marrying-fpga-beefy-broadwell-open-compute-future/, для меня это вариации на тему GPU.

2. Наконец-то (вчера) появляются подробности про специализированный для deep learning чип Nervana Engine -- http://www.nervanasys.com/nervana-engine-delivers-deep-learning-at-ludicrous-speed/. Обещают скорость x10 по сравнению с GPU при памяти 32GB с использованием одного чипа, и возможность использования многих чипов чуть ли с линейным ростом скорости по мере увеличения числа чипов (восемь чипов в связке обсуждается сразу, плюс ещё и межплатные соединения, если чипов нужно больше) -- . И это всё на 28нм проектных нормах, так что есть ещё куда расти. Гуглевский TPU (Tensor Processing Unit) из той же серии, хоть он и подхакан специфически под TensorFlow -- https://cloudplatform.googleblog.com/2016/05/Google-supercharges-machine-learning-tasks-with-custom-chip.html (и нужно тут учесть, что это 8 бит целые -- http://www.nextplatform.com/2016/05/19/google-takes-unconventional-route-homegrown-machine-learning-chips/, что сильно пересекается с пунктом 4 настоящего поста).

3. Всякие спайковые чипы (типа того же TrueNorth). Но там пока больше акцент на малую мощность, а не на большую скорость и большую память. Оптические и квантовые вычислители тут тоже обсуждаются -- я это всё сваливаю в одну кучу. Это как с новыми поколениями батареек: в экспериментах всё ОК, но почему-то очень плохо получается с масштабированием, промышленными применениями, много ограничений и от "это в принципе возможно" до "любой может попробовать, это не дефицит, и всё получится" тут огромная дистанция. Из интересных работ можно указать упорно не сдающийся IBM TrueNorth, который пробивает дорогу к мейнстриму через устройство компиляторов из "обычных сеток" в свои спайковые -- http://arxiv.org/abs/1601.04187. Другой вариант -- экзотические оптические спайковые структуры: http://www.nature.com/articles/srep19126. Квантовые вычислители пока для deep learning где-то в далёком будущем, дешёвыми и массовыми им пока не быть. Свежий обзор разных "нейроморфных чипов" вот тут: http://www.kdnuggets.com/2016/05/deep-learning-neuromorphic-chips.html

4. Крайне важное направление -- это разные варианты компрессии: прежде всего уменьшение числа параметров (ибо сетки оказываются дико избыточными -- для них используется pruning, т.е. выкидывание параметров и quantization, т.е. уменьшение разрядности параметров). Например, вот тут предлагается компрессия x251 с потерей точности сетки всего на 1% -- http://arxiv.org/abs/1605.04859. Но это компрессия "после обучения". А вот тут говорится, что при весах всего с тремя значениями (ternary weight: -1, 0, +1) достижима x16-x32 компрессия плюс уменьшается число дорогих умножений при достижении "почти state-of-the-art" (что плохо достигается для весов с двумя значениями: binary weight) -- http://arxiv.org/abs/1605.04711.

Всё это делает возможным проведение быстрых и больших (память! это выход на новые приложения, которые раньше "не влезали") обучений (trainings), после чего на ночь можно оставлять будет не один счёт, как сейчас, а их множество вариантов в рамках подхода автоматизации создания различных структур сеток и подобра для них параметров для каждого отдельного применения, т.е. AutoML (automatic machine learning): taking the human expert out of the loop -- http://www.automl.org/ и LLML (life long machine learning -- learning as humans do. Remember the knowledge learned in the past and use it in future learning) как подтема AutoML, http://automl.chalearn.org/life-long-learning.

Для чего это всё? Не только же для того, чтобы Гугль мог сделать очередного суперинтеллектуального "помощника по поиску" -- http://www.wired.com/2016/05/googles-new-allo-messaging-app-gets-edge-ai/.

Нет, быстроразрабатываемый дешёвый машинный интеллект помог бы многим и многим маленьким командам разработчиков. Ну, например, большие скорость и масштаб обучения нейронных сетей нужны, чтобы на потоке делать вот такие штуки: вкладыш-в-ухо-переводчик, на него уже идёт предзаказ (http://www.waverlylabs.com/, https://youtu.be/ojzCYgli1t0):


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

И таких приложений тысячи и тысячи, ибо компьютеры нужно учить всему, что умеет делать современный человек в рабочее и нерабочее время. Для этого нужна грубая вычислительная сила. Она уже чудовищна (GTX 1080 -- это 8.873TFLOPS!) и вполне доступна широким массам разработчиков, но всё равно ждём ускорения в десяток раз буквально через год-другой. И даже не факт, что эта сила для нейронных сетей будет замеряться во флопсах. Вычислительную силу человечьих мозгов ведь тоже не во флопсах меряют.
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 39 comments