![]() |
|
|
|
#1
|
|||
|
|||
|
Вернемся к нейронным сетям.
Рассмотрим сеть, которая должна распознавать человеческие лица. Такие сети (искусственные) давно созданны программистами и хорошо изучены. И широко используются. Предположим, что подобная сеть есть где-то в мозгу человека. Устроена она примерно следующим образом. У нее есть несколько слоев. Первый слой - входной. Каждый из входных нейронов "загорается" при наличии в картинке лица некоего признака. Скажем первый нейрон горит, если длинный нос, второй - если короткий, третий - если голубые глаза, и т.п. Эти нейроны получают сигнал от внешних нейронов (не относящихся к нашей сети). Думаю, 300 входных нейронов (т.у. 300 признаков) должно хватить для качественного распознавания лиц. Выходной слой сети содержит нейроны, каждый из которых горит, если он распознал конкретное лицо. Первый горит, если распознал Сталина, второй - Пушкина, третий - дядю Васю. Если ни один из внешних нейронов не горит, значит, лицо не распознано сетью. Если горят сразу несколько - значит, однозначного ответа сеть дать не может. Слои между входным и выходным - промежуточные. Каждый обрабатывает информацию, выданную предыдущим слоем. В искусственных сетях распознавания лиц внутренних слоев бывает 3-5. Внутренние слои находят некие абстрактные совокупные черты. Например, второй слой, получив набор черт лица от первого, может решить, восточное ли оно, детское ли, женское и т.п. и это решение передать в следующий слой. Итак, входных нейронов столько, сколько признаков лица, выходных - сколько лиц нам знакомо. Если сеть совершенствуется и появляются новые признаки (скажем, мы начинаем использовать цвет волос), то добавляется входной нейрон. Если мы встречаем новое лицо, которое хотим запомнить, добавляется выходной нейрон. Алгоритмов обучения такой сети известно несколько. Например, алгоритм обратного распространения ошибки. Преподносится лицо. Сеть обрабатывает его и выдает ответ. Вычисляется ошибка - разница между лицом и тем, что выдала сеть. Эта разница вносится как поправка в предыдущий слой. Затем оттуда в еще предыдущий слой и так до входного слоя. |
|
#2
|
|||
|
|||
|
Цитата:
Сеть самообучаемая? |
|
#3
|
|||
|
|||
|
Возможно не совсем по теме ..про распознавание лиц...у нас в Германии есть закон запрещающий носить маски...в том смысле если мне вдруг без всякого на то основания захочется прогуляться по улице в маске ..пдойдет полицейский и оштрафует...так же женщинам запрещено носить паранжу
|
|
#4
|
|||
|
|||
|
Цитата:
Что Вы имеете в виду под "автоматически"? Сеть - это learning system (обучающаяся система). Учитель может быть человеком или компьютерной программой - это не важно. Обучение происходит так. Имеется training set, который состоит из векторов признаков (то есть, ввода) и требуемого вывода для каждого ввода. Например, training set может включать 100 портретов + имя того, кто на портрете. В сеть вводится вектор признаков, например: (1, 1, 0, 1, 0, 0, ...) - (есть длинной нос, есть борода, нет двойного подбородка, есть сросшиеся брови, нет волос, нет раскосых глаз, ...) и ответ + "Федя Петров". Сеть запускается с данным вводом и выдает результат: (0, 0, 1, 0, 0, 0, ..., 0), то есть (не Сталин, не Ленин, да Федя Петров, не сосед напротив, не Коля с водокачки, ...). Это правильный результат, ошибка = 0. Если сеть выдаст, например: (0, 0, 0, 1, 0, 0, ...) = (не Сталин, не Ленин, не Федя Петров, да сосед напротив, не Коля с водокачки, ...), то есть ошибка. Ошибка равна разности векторов : (0, 0, 1, 0, 0, ...) - (0, 0, 0, 1, 0, ...) = (0, 0, 1, -1, 0, ...). С помощью этой ошибки корректируются коэффиценты нейронов предпоследнего слоя. То есть, нейрон, который выдал 1 там, где должен был быть 0, корректируется. И второй нейрон, который выдал 0 там, где должна была быть 1. Потом считается ошибка в предыдущем слое и т.д. наверх. Всё это можно, естественно, производить автоматически - приготовьте 100 портретов, для каждого приготовьте вектор признаков и вводите их с помощью программы в сеть и изменяйте коэффиценты нейронов с помощью программы. У человека это тоже автоматически - вы идете с женой по улице, она показывает вам на проходящего мимо незнакомого мужчину и говорит: "Это Ермаков. Он мне вчера сказал, что у меня красивые глаза". Ваша сеть распознавания лиц быстренько добавляет один выходной нейрон, который будет выдавать Ермакова. Потом в сеть вводится вектор признаков лица Ермакова. Сеть выдает ответ: Петров и Сидоров - потому что эти ваши приятели немного походи на Ермакова. Вы вычисляете ошибку и меняете коэфиценты нейронов так, чтобы Петров с Сидоровым не выдавали Ермакова, а Ермаков не выдавал их. |