Как нейросеть распознаёт цифры: структура и принципы
Ключевые тезисы:
Нейросеть — это сложная функция с тысячами параметров, которая учится распознавать закономерности.
Задача распознавания рукописных цифр тривиальна для человека, но сложна для программирования в лоб.
Сеть состоит из слоёв нейронов, где активация одного слоя определяет активацию следующего.
Обучение — это поиск правильных значений 13 000+ параметров (весов и сдвигов).
Идея архитектуры вдохновлена мозгом: разбиение задачи на уровни абстракции (пиксели → грани → компоненты → цифры).
Постановка задачи
Задача — создать программу, которая принимает на вход изображение 28×28 пикселей (градации серого) и выдаёт цифру от 0 до 9. Для человека это просто, для прямого программирования — сложно. Это классическая вводная задача в машинное обучение.
Структура простейшей нейросети
Нейрон здесь — это сущность, содержащая число от 0 до 1, называемое активацией.
Слои сети:
- Входной слой: 784 нейрона (28×28). Активация каждого равна яркости соответствующего пикселя (0 — чёрный, 1 — белый).
- Скрытые слои: В примере — 2 слоя по 16 нейронов каждый. Их количество и размер могут варьироваться.
- Выходной слой: 10 нейронов. Активация каждого показывает, насколько система уверена, что на входе соответствующая цифра (от 0 до 9).
Как работает один слой: веса, сдвиги и функция активации
Активация нейрона в следующем слое вычисляется на основе активаций нейронов предыдущего слоя.
Процесс для одного нейрона:
- Взвешенная сумма: Каждое соединение между нейронами имеет вес (число). Активации предыдущего слоя умножаются на свои веса и суммируются.
Положительные веса "поощряют" активацию.
Отрицательные веса "подавляют" активацию.
- Добавление сдвига: К сумме прибавляется число (сдвиг или bias). Он определяет, насколько большой должна быть взвешенная сумма, чтобы нейрон "зажёгся".
- Функция активации: Полученное число пропускается через функцию, сжимающую результат в диапазон от 0 до 1.
- Исторически использовалась сигмоида (логистическая кривая).
- В современных сетях чаще используется ReLU (Rectified Linear Unit):
max(0, x). Она проще и ускоряет обучение глубоких сетей.
Пример: Чтобы нейрон второго слоя распознавал грань в определённой области, ему назначают положительные веса на пиксели этой области и отрицательные — на окружающие. Тогда он максимально активируется, когда центр ярче, а края темнее.
Почему слоистая структура разумна?
Идея в иерархическом распознавании признаков:
- Второй слой может учиться распознавать простые грани (маленькие штрихи, края).
- Третий слой комбинирует грани в компоненты цифр (кружок, вертикальная линия).
- Выходной слой комбинирует компоненты в целые цифры.
Аналогия: Распознавание речи: звуки → слоги → слова → фразы → смысл.
Масштаб параметров и компактное представление
- Между первыми двумя слоями уже 784 × 16 весов + 16 сдвигов.
- Вся представленная сеть содержит около 13 000 параметров (весов и сдвигов). Обучение — это настройка всех этих "ручек".
Компактная запись (линейная алгебра):
- Активации слоя представляются вектором.
- Веса между слоями — матрицей.
- Вычисление активаций следующего слоя:
σ(W * a + b), где:W— матрица весов,a— вектор активаций,b— вектор сдвигов,σ— функция активации (сигмоида/ReLU).
Такое представление позволяет использовать оптимизированные библиотеки для матричных вычислений.
Выводы
- Нейросеть — не чёрный ящик, а конкретная, хотя и сложная, математическая функция.
- Понимание роли весов и сдвигов даёт основу для диагностики и улучшения сети.
- Слоистая архитектура имитирует принцип композиции признаков от простого к сложному.
- Обучение (поиск оптимальных параметров) — тема отдельного глубокого разбора.