Что «на уме» у нейронных сетей? Почему даже такие продвинутые люди как Илон Маск их испугались? Сегодня мы постараемся «взломать» этот черный ящик и показать вам всю подноготную!
Это вторая часть цикла статей про «внутренности» нейронных сетей. Пристегнулись? Поехали!
Первая часть здесь:
В прошлый раз мы рассмотрели абстрактный пример небольшой нейронной сети, которая, гипотетически, помогала нам отделять мух от котлет на изображениях. Вспомним основные моменты: мы подавали на вход нейронки изображение (попиксельно), а на выходе ожидали активацию одного из двух нейронов, отвечающего собственно за муху или котлету.
Мы говорили, что кружки на этой схеме – это нейроны, а линии обозначают связи между нейронами. Но вот что именно из себя представляет нейрон – мы тогда опустили.
Нейроны – это «кирпичики» из которых состоят нейронные сети. Каждый нейрон имеет один или несколько входов и только один выход.
На рисунке 2A видно, что у выбранного нейрона девять входов и, как будто, пять выходов. Со входами все верно, их действительно девять. Но выход только один. Просто он как бы копируется пять раз, чтобы можно было передать выходное значение всем следующим нейронам. На рисунке 2B это изображено более наглядно, но обычно принято использовать схему 2A.
Нейроны определенным образом связаны между собой. Это называют архитектурой нейронной сети. Базовые принципы тут такие:
- каждый нейрон на вход получает набор чисел по принципу: один вход – одно число. Таким образом, наш нейрон с рисунка 2 получит на вход девять чисел;
- каждый нейрон совершает над числами определенные математические вычисления (какие именно будем рассматривать позже), а полученный результат передает на свой единственный выход;
- выход одного нейрона соединяется со входами других нейронов;
Таким образом, нейрон представляет из себя простой вычислитель, некую функцию, которая получает на вход определенное, а в общем случае любое, количество чисел (x1, x2, …, xn), и возвращает на выходе одно единственное число y – результат математических вычислений над входными значениями.
Математически это записывается так:
Более подробно об этом мы будем говорить в следующих статьях, а пока посмотрим, как нейроны соединяются друг с другом.
В классической схеме каждый нейрон предыдущего слоя передает свое выходное значение на все нейроны следующего слоя. Это называется полносвязной сетью прямого распространения. Полносвязной, потому что от каждого к каждому между слоями. А прямого распространения, т.к. передача информации осуществляется от входов к выходам, шаг за шагом, по слоям, без всяких петель и циклов.
Существуют и другие архитектуры, например, рекуррентные нейронные сети, в которых возможна «передача назад» или зацикливание на несколько шагов, но об этом позже.
Нейронная сеть, схема которой изображена на рисунке 1, является полносвязной сетью прямого распространения.
Нейроны входного слоя в такой схеме, как правило, имеют только один вход и не совершают никаких математических операций, а просто передают полученные значения нейронам следующего слоя. Т.е. у них входное значение и выходное значение совпадают. Математически это можно записать как y=x.
Давайте возьмем одно из изображений котлетки из прошлой статьи и передадим его нашей нейронной сети.
Допустим, что наша нейронная сеть «прогнала» все эти значения по своим нейронам и на выходе мы получили пару чисел (0 – выход первого нейрона; 1 – выход второго нейрона). Таким образом, мы делаем заключение, что наша нейросеть определила именно котлету, а не муху (в противном случае мы получили бы не (0,1), а (1,0)).
Мы можем составить следующую таблицу. В ней записаны числовые значения, которые получились на выходах всех наших нейронов в сети.
Первый слой – входной. Он ничего не вычисляет, поэтому мы точно знаем, что будет на выходах таких нейронов. Четвертый слой – выходной. Мы считываем информацию и видим, что там – муха (1,0) или котлетка (0,1). Третий и четвертый слои – скрытые. В общем и целом, нас не интересует что будет на их выходах. Это промежуточные значения. Обозначим их просто y (с определенным индексом – номер слоя, номер нейрона в слое).
Итак, что мы выяснили сегодня.
Нейрон - это обычный вычислитель, математическая функция, которая получает на вход несколько чисел, совершает над ними математические операции, а результат передает дальше по сети, следующим нейронам, в следующий слой.
А теперь внимание! Вся нейросеть в целом делает, по сути, тоже самое. Она получает на вход несколько чисел, совершает над ними математические операции (при помощи множества простейших вычислителей – нейронов), и выдает нам несколько чисел в виде результата. Т.е., нейронная сеть, по большому счету тоже является математической функцией!
Тут возникает вопрос. А каким образом эта функция может определять то, что есть на изображениях? Как это у людей получилось так правильно подобрать формулы внутри нейронов, чтобы после элементарных математических вычислений мы получали такие шокирующие результаты?
Все это мы будем изучать в дальнейшем. А пока давайте рассмотрим вот какой момент. Почему многие сейчас боятся развития нейросетей, того что они могут стать слишком умными, обрести сознание, захватить мир, уничтожить человечество и т.д.? С простыми обывателями все понятно, но ведь об этом говорят даже те, кто непосредственно связан с данной индустрией. Многие из них заявляют – «мы не знаем как они работают!»
Смотрите, мы за две небольших статьи разобрали общие принципы. Да, есть еще очень важные моменты, которые мы пока не затронули, но тем не менее. Почему мы не знаем, как они работают?
Количество нейронов – известно, количество слоев тоже. Все формулы по которым происходят вычисления тоже известны. При необходимости, мы можем даже сохранить и узнать значения всех тех промежуточных игреков, которые мы записали в таблице выше. Другое дело, что в реальных сетях, которые показывают вау-эффект, таких значений будет очень много!!! Но их можно посмотреть. Что же нам тогда не известно и что нас так пугает?
А не известна нам интерпретация этих чисел. Да, мы понимаем, что мы подаем на вход нейросети и понимаем, что она выдает на выходе. Но вот как можно интерпретировать все эти игреки? За что отвечает каждый конкретный нейрон?
Можно предположить, что нейросеть «ищет» на фотографиях какие-то признаки объектов. Например, глаз или какую-то часть глаза, зрачок там, или часть носа или ушную раковину, или пальцы – да хоть что-нибудь! И каждый нейрон отвечает за что-то свое. Есть глаз на фотографии – активируется нейрон ответственный за глаз и т.п. Следующий слой, например, отвечает уже за лицо. Лицо человека – один нейрон; кошки – другой. Казалось бы, логично. Ну согласно нашей человеческой логике.
Но это вообще не так! Мы знаем только вход и выход. Внутри нейросети – «полная каша». Вернее, мы не можем каким-то образом интерпретировать те числа, которые получаются в скрытых слоях. Нет, безусловно, нейросеть «находит» каике-то закономерности в исходных данных, но это какие-то инопланетные закономерности, людям пока не понятные!
Но, ведь нам пока не понятно, до конца, как и наш собственный мозг работает!!! Так стоит ли этого бояться?
Мы еще будем касаться данной темы и разбирать все более подробно, но хотелось бы уже сейчас, услышать ваше мнение по этому поводу. Не стесняйтесь оставлять комментарии и подписывайтесь на канал – дальше будет интереснее!