На активацию данного нейрона будет положительно влиять падение температуры, свойственное осени.
Если наблюдается постепенный рост температуры, то, скорее всего, это статистически будет влиять в минус, т.е. не будет активировать данный нейрон.
Понятно, что бывают ситуации, когда осенью температура растет, но, скорее всего, статистически рост температуры в течение 3 дней будет отрицательно влиять на этот нейрон.
То, что температура слишком высокая, точно будет отрицательно влиять на нейрон, отвечающий за осень, т.к. не бывает очень высоких температур в это время года, и так далее.
И, наконец, нейроны 2 скрытого слоя соединяются с двумя выходными нейронами, которые выдают предсказание по температуре.
При этом обратите внимание, что сами мы не задаем, за что будет отвечать каждый из нейронов (это было бы примером классического машинного обучения). Нейронная сеть сама сделает нейроны "ответственными" за те или иные понятия.
Более того, в рамках нейронной сети привычные нам понятия, такие как "весна", "осень", "температура падает" и т.д. не существуют. Мы просто обозначили их так для своего удобства, чтобы нам было понятнее, что примерно происходит внутри во время обучения.
В действительности же нейронная сеть сама в процессе обучения выделит именно те свойства, которые нужны для решения данной конкретной задачи.
Важно понимать, что нейронная сеть именно с такой архитектурой не будет правильно прогнозировать температуру – это упрощенный пример, показывающий, как внутри сети может происходить выделение различных признаков (так называемый процесс feature extraction).
Процесс выделения признаков хорошо иллюстрирует работа свёрточных нейронных сетей.
Допустим, на вход сети мы подаем фото кошек и собак, и сеть начинает их анализировать.
На первых слоях сеть определяет наиболее общие признаки: линия, круг, темное пятно, угол, близкий к прямому, яркое пятно на фоне темного и т.д.
На следующем слое сеть сможет извлечь уже иные признаки: ухо, лапа, голова, нос, хвост и т.д.
Еще дальше, на следующем слое будет идет анализ уже такого плана:
- здесь хвост загнут вверх, это коррелирует с лайкой, значит собака;
- а тут короткие лапы, а у кошек нет коротких лап, поэтому, скорее всего, собака, такса;
- а вот здесь треугольное ухо с белым кончиком, похоже на такую-то породу кошки, и т.д.
Примерно таким образом происходит процесс feature extraction.
Безусловно, чем больше нейронов в сети, тем более детальные, специфические свойства она может выделить.
Если же нейронов немного, она сможет работать только «крупными мазками», т.к. у нее не хватит мощности проанализировать все возможные комбинации признаков.
Таким образом, общий принцип выделения свойств - это все большее обобщение при переходе с одного слоя на другой, от низкого уровня ко все более высокому.
Итак, давайте снова вспомним, что из себя представляет нейронная сеть.
Во-первых, это архитектура.
Она задается разработчиком, т.е. мы сами определяем, сколько у сети слоев, как они связаны, сколько нейронов на каждом слое, есть ли у этой сети память (об этом чуть позже), какие у нее активационные функции и т.д.
Архитектуру сети можно представить, например, как обычный
JSON,
YAML или
XML-файл (текстовые файлы, в которых можно полностью отразить её структуру).
Во-вторых, это обученные веса.
Веса нейронной сети хранятся в совокупности
матриц в виде действительных чисел, количество которых (чисел) равно общему количеству связей между нейронами в самой сети.
Количество самих матриц зависит от количества слоев и того, как нейроны разных слоев связаны друг с другом.
Веса задаются в начале обучения (обычно случайным образом) и подбираются в процессе обучения.
Таким образом, сеть можно легко сохранить через сохранение её архитектуры и весов, а в дальнейшем снова использовать её, обратившись к файлам с архитектурой и весами.