Как компьютеры научились потрясающе хорошо распознавать изображения

Знаковая научная работа от 2012 года преобразовала область программного распознавания изображений Сегодня я могу, допустим, открыть Google Photos, написать «пляж», и увидеть кучу своих фотографий с различных пляжей, которые я посетил за последнее десятилетие. И я никогда не подписывал свои фотографии – Google распознаёт на них пляжи на основе их содержания. Эта, казалось бы, скучная особенность основывается на технологии под названием «глубокая свёрточная нейросеть», позволяющая программам понимать изображения при помощи сложного способа, недоступного технологиям предыдущих поколений. В последние годы исследователи обнаружили, что точность ПО становится лучше по мере того, как они создают всё более глубокие нейросети (НС) и обучают их на всё более крупных наборах данных. В Google несколько лет назад разработали собственные специальные чипы для НС, а другие компании пытаются угнаться за ней. Теперь автопроизводитель разрабатывает собственный чип для ускорения работы НС в будущих версиях автопилота. Или взять Apple: в чипах A11 и A12, центральных для последних iPhone, есть "нейронный процессор" Neural Engine, ускоряющий работу НС и позволяющий приложениям для распознавания изображений и голоса работать лучше. Но потом Крижевский и его коллеги из университета Торонто подали заявку на престижное соревнование по распознаванию изображений, и она кардинально превосходило по точности всё, что было разработано до неё. Почти мгновенно ГНС стали лидирующей технологией в распознавании изображений. Без функции активации каждая сколь угодно сложная НС сводится к линейной комбинации входных данных. Каждое изображение – это 28 * 28 = 784 входных величины, каждая из которых представляет собой вещественное число от 0 до 1, обозначающее, насколько пиксель светлый или тёмный. Каждый нейрон принимает взвешенное среднее из входных данных, добавляет смещение и применяет функцию активации. Каждый нейрон воспринимает входные данные от каждого нейрона предыдущего слоя. Сходным образом выходной слой содержит 10 нейронов, каждый из которых принимает входные данные от всех 15 нейронов среднего слоя, что добавляет ещё 15*10=150 весовых параметров. Обучающий алгоритм изменяет входные веса нейрона, отвечающего за «0», чтобы он стал ближе к 0 в следующий раз при обработке этого изображения. И наоборот, алгоритм увеличивает веса входных данных для выхода «7», что заставить нейрон выдавать более высокое значение в следующий раз, когда ему дадут это изображение. Затем алгоритм должен выполнить те же расчёты для среднего слоя: изменить каждый входной вес в том направлении, которое уменьшит ошибки сети – опять-таки, приближая выход «7» ближе к 1, а остальные – к 0. Но У каждого среднего нейрона есть связь со всеми 10 выходными, что осложняет дело в двух аспектах. У описанной в статье НС для распознавания почерка есть два слоя, 25 нейронов и почти 12 000 параметров.Хабр