0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>В этой статье мы рассмотрим, как создать собственную простейшую нейронную сеть с помощью языка программирования "Питон". Мы не только создадим нейронную сеть с нуля, но и не будем использовать никаких библиотек. И займёт это всё не более девяти строчек кода на "Питоне".</p>
1
<p>В этой статье мы рассмотрим, как создать собственную простейшую нейронную сеть с помощью языка программирования "Питон". Мы не только создадим нейронную сеть с нуля, но и не будем использовать никаких библиотек. И займёт это всё не более девяти строчек кода на "Питоне".</p>
2
<p>Вот как выглядит код простейшей нейронной сети на "Питоне":</p>
2
<p>Вот как выглядит код простейшей нейронной сети на "Питоне":</p>
3
<p>Теперь давайте поговорим о том, как это получилось, а также посмотрим на расширенную версию кода. Внимательно изучив эту статью, вы сможете и сами написать свою нейронную сеть на "Питоне".</p>
3
<p>Теперь давайте поговорим о том, как это получилось, а также посмотрим на расширенную версию кода. Внимательно изучив эту статью, вы сможете и сами написать свою нейронную сеть на "Питоне".</p>
4
<h2>Что такое нейронная сеть (Neural Network)?</h2>
4
<h2>Что такое нейронная сеть (Neural Network)?</h2>
5
<p>Прежде чем продолжить, вспомним, что из себя представляет нейронная сеть. Мы знаем, что мозг человека состоит из 100 млрд. клеток, которые мы называем нейроны. Они соединены синапсами, а когда нужное количество синаптических входов возбуждено, нейрон тоже возбуждается. Этот процесс учёные называют "мышлением".</p>
5
<p>Прежде чем продолжить, вспомним, что из себя представляет нейронная сеть. Мы знаем, что мозг человека состоит из 100 млрд. клеток, которые мы называем нейроны. Они соединены синапсами, а когда нужное количество синаптических входов возбуждено, нейрон тоже возбуждается. Этот процесс учёные называют "мышлением".</p>
6
<p>Процесс можно смоделировать, если создать нейронную сеть на ПК. Причём нет необходимости моделировать сложнейшую модель мозга человека полностью, хватит лишь нескольких основных правил. Чтобы упростить реализацию, будем использовать классические матрицы и создадим модель из 3-х входных и одного выходного сигналов. И попробуем выполнить тренировку нейрона.</p>
6
<p>Процесс можно смоделировать, если создать нейронную сеть на ПК. Причём нет необходимости моделировать сложнейшую модель мозга человека полностью, хватит лишь нескольких основных правил. Чтобы упростить реализацию, будем использовать классические матрицы и создадим модель из 3-х входных и одного выходного сигналов. И попробуем выполнить тренировку нейрона.</p>
7
<p>Первые 4 примера - это тренировочная выборка.</p>
7
<p>Первые 4 примера - это тренировочная выборка.</p>
8
<p>Обратите внимание, что значение столбца Output всегда равно значению самой левой колонки из столбца Input. Это значит, что правильный ответ в нашем случае будет равен 1.</p>
8
<p>Обратите внимание, что значение столбца Output всегда равно значению самой левой колонки из столбца Input. Это значит, что правильный ответ в нашем случае будет равен 1.</p>
9
<h2>Обучаем нейронную сеть</h2>
9
<h2>Обучаем нейронную сеть</h2>
10
<p>Теперь давайте добавим каждому входу вес (положительное или отрицательное число). Вход с большим отрицательным либо большим положительным весом существенно повлияет на выход нейрона. Но до начала обучения надо установить каждый вес случайной величиной. После этого можно приступать: 1. Возьмём входные данные из примера, скорректируем значения по весам и передадим их по формуле расчёта выхода нейрона. 2. Вычислим ошибочное значение (это, по сути, разница между выходом нейрона и желаемым нами выходом в примере используемого нами тренировочного набора). 3. Немного отрегулируем вес с учётом направления ошибки. 4. Повторим данный процесс десять тысяч раз.</p>
10
<p>Теперь давайте добавим каждому входу вес (положительное или отрицательное число). Вход с большим отрицательным либо большим положительным весом существенно повлияет на выход нейрона. Но до начала обучения надо установить каждый вес случайной величиной. После этого можно приступать: 1. Возьмём входные данные из примера, скорректируем значения по весам и передадим их по формуле расчёта выхода нейрона. 2. Вычислим ошибочное значение (это, по сути, разница между выходом нейрона и желаемым нами выходом в примере используемого нами тренировочного набора). 3. Немного отрегулируем вес с учётом направления ошибки. 4. Повторим данный процесс десять тысяч раз.</p>
11
<p>По итогу вес нейрона достигает оптимального значения для нашего обучающего набора. Теперь, если позволить нейрону "подумать", он сделает хороший прогноз.</p>
11
<p>По итогу вес нейрона достигает оптимального значения для нашего обучающего набора. Теперь, если позволить нейрону "подумать", он сделает хороший прогноз.</p>
12
<h2>Формулируем расчёт выхода нейрона</h2>
12
<h2>Формулируем расчёт выхода нейрона</h2>
13
<p>Теперь посмотрим на формулу расчёта выхода нейрона. Поначалу возьмём взвешенную сумму входов:</p>
13
<p>Теперь посмотрим на формулу расчёта выхода нейрона. Поначалу возьмём взвешенную сумму входов:</p>
14
<p>Потом выполним нормализацию, и результат будет между 0 и 1. Теперь задействуем математическую функцию Sigmoid:</p>
14
<p>Потом выполним нормализацию, и результат будет между 0 и 1. Теперь задействуем математическую функцию Sigmoid:</p>
15
<p>Функция Sigmoid нарисует S-образную кривую:</p>
15
<p>Функция Sigmoid нарисует S-образную кривую:</p>
16
<p>Подставим 1-е уравнение во 2-е и получим интересующую нас формулу выхода:</p>
16
<p>Подставим 1-е уравнение во 2-е и получим интересующую нас формулу выхода:</p>
17
<p>Правда, пороговый потенциал использовать не будем в целях упрощения примера.</p>
17
<p>Правда, пороговый потенциал использовать не будем в целях упрощения примера.</p>
18
<h2>Формула корректировки веса</h2>
18
<h2>Формула корректировки веса</h2>
19
<p>В процессе тренировочного цикла мы выполняем корректировку весов. Но насколько происходит корректировка? Тут подойдёт формула взвешенной ошибки:</p>
19
<p>В процессе тренировочного цикла мы выполняем корректировку весов. Но насколько происходит корректировка? Тут подойдёт формула взвешенной ошибки:</p>
20
<p>Формула позволяет выполнять корректировку пропорционально величине ошибки. Также умножение происходит на входное значение, равное 0 либо 1. Когда входное значение будет равно 0, вес корректироваться не будет. Дополнительно мы выполняем умножение на градиент сигмовидной кривой. Что тут нужно учесть: 1. Сигмовидная кривая использовалась для расчёта выхода нейрона. 2. При больших числах кривая имеет небольшой градиент.</p>
20
<p>Формула позволяет выполнять корректировку пропорционально величине ошибки. Также умножение происходит на входное значение, равное 0 либо 1. Когда входное значение будет равно 0, вес корректироваться не будет. Дополнительно мы выполняем умножение на градиент сигмовидной кривой. Что тут нужно учесть: 1. Сигмовидная кривая использовалась для расчёта выхода нейрона. 2. При больших числах кривая имеет небольшой градиент.</p>
21
<p>Если нейрон уверен в правильности существующего веса, он не хочет корректировать его слишком сильно. Умножение на градиент кривой именно это и делает.</p>
21
<p>Если нейрон уверен в правильности существующего веса, он не хочет корректировать его слишком сильно. Умножение на градиент кривой именно это и делает.</p>
22
<p>Градиент Сигмоды образуется, если будем выполнять расчёты взятием производной:</p>
22
<p>Градиент Сигмоды образуется, если будем выполнять расчёты взятием производной:</p>
23
<p>Если мы вычтем 2-е уравнение из 1-го, то получим необходимую итоговую формулу:</p>
23
<p>Если мы вычтем 2-е уравнение из 1-го, то получим необходимую итоговую формулу:</p>
24
<p>Есть и другие формулы, позволяющие нейрону обучаться быстрее, но указанная нами является максимально простой.</p>
24
<p>Есть и другие формулы, позволяющие нейрону обучаться быстрее, но указанная нами является максимально простой.</p>
25
<h2>Пример нейронной сети на Python</h2>
25
<h2>Пример нейронной сети на Python</h2>
26
<p>Было заявлено, что библиотеки задействоваться не будут. Так-то оно так, но четыре метода из numpy импортировать придётся: - exp - для экспоненцирования; - dot - для перемножения матриц; - array - для создания матрицы; - random - для генерации случайных чисел.</p>
26
<p>Было заявлено, что библиотеки задействоваться не будут. Так-то оно так, но четыре метода из numpy импортировать придётся: - exp - для экспоненцирования; - dot - для перемножения матриц; - array - для создания матрицы; - random - для генерации случайных чисел.</p>
27
<p>Тот же array() можно применять для представления обучающего множества.</p>
27
<p>Тот же array() можно применять для представления обучающего множества.</p>
28
<p>В нашем случае “.T” является функцией транспонирования матриц.</p>
28
<p>В нашем случае “.T” является функцией транспонирования матриц.</p>
29
<p>Раз мы готовы создать более красивую версию исходного кода, приступим. Обратите внимание, что на каждой итерации одновременно обрабатывается вся тренировочная выборка.</p>
29
<p>Раз мы готовы создать более красивую версию исходного кода, приступим. Обратите внимание, что на каждой итерации одновременно обрабатывается вся тренировочная выборка.</p>
30
<p>Этот код вы найдёте и по<a>ссылке</a>на GitHub. Если будете работать с Python 3, замените лишь xrange на range.</p>
30
<p>Этот код вы найдёте и по<a>ссылке</a>на GitHub. Если будете работать с Python 3, замените лишь xrange на range.</p>
31
<h2>Итог</h2>
31
<h2>Итог</h2>
32
<p>Давайте запустим нейронную сеть через терминал:</p>
32
<p>Давайте запустим нейронную сеть через терминал:</p>
33
<p>Результат должен быть приблизительно следующим:</p>
33
<p>Результат должен быть приблизительно следующим:</p>
34
<p>Если у вас всё получилось, поздравляем - вы только что написали простейшую нейросеть!</p>
34
<p>Если у вас всё получилось, поздравляем - вы только что написали простейшую нейросеть!</p>
35
<p>Смотрите, изначально нейросеть присваивала себе случайные значения весов, потом она обучалась с помощью тренировочного набора. Далее она рассмотрела новую ситуацию [1, 0, 0], предсказав 0.99993704. Так как правильный ответ равен единице, можно сказать, что предсказание получилось довольно точным.</p>
35
<p>Смотрите, изначально нейросеть присваивала себе случайные значения весов, потом она обучалась с помощью тренировочного набора. Далее она рассмотрела новую ситуацию [1, 0, 0], предсказав 0.99993704. Так как правильный ответ равен единице, можно сказать, что предсказание получилось довольно точным.</p>
36
<p>Источник -<a>How to build a simple neural network in 9 lines of Python code</a>.</p>
36
<p>Источник -<a>How to build a simple neural network in 9 lines of Python code</a>.</p>
37
<p>Поначалу может показаться, что всё просто. Но если вы хотите освоить работу нейронных сетей на практике и всерьёз, стоит подумать о специализированных курсах. На них вы узнаете про нейронные сети гораздо больше, ведь простого чтения статей из интернета явно недостаточно. Вы разберёте нейросети прямого распространения, обратного распространения, скрытого слоя и т. д. и т. п., узнаете про функции потерь, функцию активации, обучение с подкреплением, ознакомитесь с другой важной информацией. Записаться на курс по нейронным сетям в качестве студента можно по ссылке ниже:<a>https://otus.ru/lessons/deep-learning-engineer/</a>.</p>
37
<p>Поначалу может показаться, что всё просто. Но если вы хотите освоить работу нейронных сетей на практике и всерьёз, стоит подумать о специализированных курсах. На них вы узнаете про нейронные сети гораздо больше, ведь простого чтения статей из интернета явно недостаточно. Вы разберёте нейросети прямого распространения, обратного распространения, скрытого слоя и т. д. и т. п., узнаете про функции потерь, функцию активации, обучение с подкреплением, ознакомитесь с другой важной информацией. Записаться на курс по нейронным сетям в качестве студента можно по ссылке ниже:<a>https://otus.ru/lessons/deep-learning-engineer/</a>.</p>
38
38