HTML Diff
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