Re[3]: Нейросеть для чайников
От: anton_t Россия  
Дата: 18.07.18 18:09
Оценка: 1 (1) +1
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, anton_t, Вы писали:


_>>А питон лучше подучить, если в этой области развиваться хочешь.


S>А язык R подойдет вместо питона?


Если хочешь стать Data Scientist, то возможно, если хочешь пощупать нейронные сети как программист — тогда питон.
Re[2]: Нейросеть для чайников
От: ro_man  
Дата: 18.07.18 18:23
Оценка:
Здравствуйте, anton_t, Вы писали:

_>Нейронные сети давно уже решают задачи которые алгоритмически хз как решать. Например яндекс и гугл переводчиики за последние пару лет довольно сильно подняли качество перевода — за счет использования нейронных сетей. От яндекса даже была статься на хабре на этот счет.


Ради интереса. Яндексопереводчик инглиш<->рашн — вполне на уровне. А вот Дойч->Русиш — на уровне промт 15-летней давности. Недообучили? Или меньше обратной связи и т.п. Про остальные языки я уже и не спрашиваю. А может просто база инглиш выражений накопилась? Без иронии, просто интересно.
Re[9]: Нейросеть для чайников
От: Erop Россия  
Дата: 18.07.18 20:16
Оценка: 4 (2)
Здравствуйте, Khimik, Вы писали:

E>>Пуллинг -- это ещё один нелинейный слой, который берёт наш "квадратик" 4х4х10 и заменяет его квадратиком 1х1х10, выбирая каждый раз максимальной значение из 16-и.


K>Я чувствую какую-то путаницу в обозначениях. Здесь 4*4 — это размер растра, а третья цифра (10) — количество вариантов значений в каждом растре?

Да, обычно это называют "число каналов"

На самом деле, если понять как работает такая сетка, типа первая свёртка переводит картинки в 128 признаков, вторая по 128 признакам опознаёт цифру.
Пуллинг отвечает за "ерзанье" цифры по рамке.

Теперь можно попробовать эту штуку модернизировать.

Первый ход -- поставить пуллинг до второго слоя. Пусть пуллятся признаки, а не вероятности классов! Тогда считать надо будет меньше, а каждый признак будет вычисляться устойчивее, так что сетка станет устойчива и к каким-то ещё другим "шевелениям" картинок.

Второй ход, вместо свёртки 13x13x3 -> 1х1х128 (около 65К чисел) сделать несколько свёрток подряд, но более маленьких. Ну, например, сначала свернуть ядром 13x1x3->1x1x32 а потом ядром 1x13x32 -> 1x1x128. Получим тоже какой-то линейный оператор, но он будет должен делать больше обобщений, так как он более ограничен в выборе коэффициентов.

Потом можно ещё и 13x1x.. разбить на несколько этапов. Ну, например, 3х1х... -> 1x1x... потом ещё раз и ещё раз.
Потом можно ещё пуллинги вставить между свёртками, что бы быстрее агрегировать информацию.

Можешь пробовать учить разные такие сетки и смотреть насколько размытым картинкам они будут учиться. Например, можно картинку немного двигать, качать влево-вправо, сжимать по горизонтали/вертикали...

Потом можно просто взять MNIST

Примерно понятно?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[10]: Нейросеть для чайников
От: Khimik  
Дата: 19.07.18 06:39
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Khimik, Вы писали:


E>>>Пуллинг -- это ещё один нелинейный слой, который берёт наш "квадратик" 4х4х10 и заменяет его квадратиком 1х1х10, выбирая каждый раз максимальной значение из 16-и.


K>>Я чувствую какую-то путаницу в обозначениях. Здесь 4*4 — это размер растра, а третья цифра (10) — количество вариантов значений в каждом растре?

E>Да, обычно это называют "число каналов"

Нет, кажется вы меня путаете.

E>Идя CNN в том, что есть некое "окошко", например 13х13, которое скользит по исходной картинке, и вычисляет с ОДНИМИ И ТЕМИ ЖЕ коэффициентами свёртки, например 128 разных свёрток. В результате (если не дополнять исходную картинку 16х16 нулями), получим "картинку" 4х4 в каждом "пикселе" которой лежит 128 чисел. Теперь можем сделать ещё одну свёртку, которая из 128 числе делает 10 (то есть матрица 128х10), получаем 10 вероятностей, что в соответствующем тому или иному "пикселю" квадрате есть та или иная цифра.


Всё-таки, судя по этому тексту, обозначение 4*4*128 значит, что в каждом "пикселе" растра 4*4 содержится 128 чисел. Т.е. этот массив всё-таки трехмерный, а не двумерный, как мне вначале показалось.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[11]: Нейросеть для чайников
От: De-Bill  
Дата: 19.07.18 06:55
Оценка: 2 (1)
K>Нет, кажется вы меня путаете.

Если тема реально интересна, то надо начинать с просмотра этих лекций https://www.youtube.com/playlist?list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv
Re[11]: Нейросеть для чайников
От: Erop Россия  
Дата: 19.07.18 07:03
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Всё-таки, судя по этому тексту, обозначение 4*4*128 значит, что в каждом "пикселе" растра 4*4 содержится 128 чисел. Т.е. этот массив всё-таки трехмерный, а не двумерный, как мне вначале показалось.


Да, массив, конечно, 3-х-мерный. Я же там везде пишу, про отображение трёхмерных массивов?
Но воспринимать его можно как двухмерное многоканальное изображение.

Вот, например, RGB картинку ты как воспринимаешь? Как 2D — массив трёхканальных пикселей, или как 3D-массив? По идее можно и так и так.
Но для CNN, пуллинга и прочих подобных слоёв, первое представление удобнее.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Нейросеть для чайников
От: Khimik  
Дата: 19.07.18 09:04
Оценка:
Здравствуйте, Erop, Вы писали:

E>Идя CNN в том, что есть некое "окошко", например 13х13, которое скользит по исходной картинке, и вычисляет с ОДНИМИ И ТЕМИ ЖЕ коэффициентами свёртки, например 128 разных свёрток. В результате (если не дополнять исходную картинку 16х16 нулями), получим "картинку" 4х4 в каждом "пикселе" которой лежит 128 чисел. Теперь можем сделать ещё одну свёртку, которая из 128 числе делает 10 (то есть матрица 128х10), получаем 10 вероятностей, что в соответствующем тому или иному "пикселю" квадрате есть та или иная цифра.


Я полагаю, это "окошко" в данном случае нужно как раз для того, чтобы чуть сдвинутая цифра распозналась не хуже оригинальной.
Откуда берётся 4*4 — понятно, а почему именно 128 коэффициентов свертки?

А далее для каждого "пикселя" с 128 "компонентами цвета" эти 128 чисел превращаются в 10 таким же способом — умножением на матрицу? А матрицы для умножения должны быть одинаковые или разные для каждого из 4*4 пикселей?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[11]: Нейросеть для чайников
От: Erop Россия  
Дата: 19.07.18 09:28
Оценка:
Здравствуйте, Khimik, Вы писали:

E>>Да, обычно это называют "число каналов"


K>Нет, кажется вы меня путаете.


Да, я неверно понял про число вариантов.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[9]: Нейросеть для чайников
От: Erop Россия  
Дата: 19.07.18 09:31
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Я полагаю, это "окошко" в данном случае нужно как раз для того, чтобы чуть сдвинутая цифра распозналась не хуже оригинальной.

K>Откуда берётся 4*4 — понятно, а почему именно 128 коэффициентов свертки?
Ну я так понял, что в исходной сети был ещё один слой их примерно 13х13 нейронов, следующая матрица из 128 в 10 -- это он Можно 169 взять, но я думаю, что и 128 хватит


K>А далее для каждого "пикселя" с 128 "компонентами цвета" эти 128 чисел превращаются в 10 таким же способом — умножением на матрицу? А матрицы для умножения должны быть одинаковые или разные для каждого из 4*4 пикселей?


Оба раза да
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Нейросеть для чайников
От: Skleroz Россия  
Дата: 19.07.18 10:18
Оценка:
K> ... Поэтому для освоения НС мне, возможно, необходимы хорошие видео. Мне кажется, лучшим вариантом было бы видео, где знающий человек долго объясняет профанам суть концепции, и до тех понемногу начинает доходить.

Лучше пока не попадалось:
Нейронные сети за 30 минут: от теории до практики
Re[10]: Нейросеть для чайников
От: Khimik  
Дата: 19.07.18 10:29
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Khimik, Вы писали:


K>>Я полагаю, это "окошко" в данном случае нужно как раз для того, чтобы чуть сдвинутая цифра распозналась не хуже оригинальной.

K>>Откуда берётся 4*4 — понятно, а почему именно 128 коэффициентов свертки?
E>Ну я так понял, что в исходной сети был ещё один слой их примерно 13х13 нейронов, следующая матрица из 128 в 10 -- это он Можно 169 взять, но я думаю, что и 128 хватит

Если 169, то я это понимаю так: исходный слой из 13*13 нейронов умножается на выделенный участок растра тоже размером 13*13; это не матричное умножение, просто для каждого пикселя значения из обоих растров перемножаются, получается третий растр. Всё так?


K>>А далее для каждого "пикселя" с 128 "компонентами цвета" эти 128 чисел превращаются в 10 таким же способом — умножением на матрицу? А матрицы для умножения должны быть одинаковые или разные для каждого из 4*4 пикселей?


E> Оба раза да


Сорри, ещё раз: матрицы для превращения 128 компонентов в 10 одинаковые для всех 4*4 ячеек?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[11]: Нейросеть для чайников
От: Erop Россия  
Дата: 19.07.18 22:53
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Если 169, то я это понимаю так: исходный слой из 13*13 нейронов умножается на выделенный участок растра тоже размером 13*13; это не матричное умножение, просто для каждого пикселя значения из обоих растров перемножаются, получается третий растр. Всё так?


Нет, именно матричное 169 или 13х13 с одной стороны и 169 с другой, или 128 или 100 или ещё сколько-то...
В оригинальной же (твоей) сетке был полносвязанный слой, где каждый нейрон зависел от каждого входа?..


K>>>А далее для каждого "пикселя" с 128 "компонентами цвета" эти 128 чисел превращаются в 10 таким же способом — умножением на матрицу? А матрицы для умножения должны быть одинаковые или разные для каждого из 4*4 пикселей?


E>> Оба раза да


K>Сорри, ещё раз: матрицы для превращения 128 компонентов в 10 одинаковые для всех 4*4 ячеек?


Да одинаковые, в этом идея CNN, что одно и то же ядро применяется во всех местах растра.

И первая матрица 13х13 на 169 тоже одна для всех положений квадратика 13х13
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Нейросеть для чайников
От: Bjorn Skalpe Земля  
Дата: 20.07.18 05:05
Оценка:
Понять как работает нейронная сеть крайне просто. Нейронка по сути это машинка по преобразования сигнала типа А в сигнал типа Б. Но как сигнал в мире преобразовать? Сигнал в природе это обычно гладкая или кусочно-гладкая функция, которая естественно раскладывается в ряды (на множители или по синусам), что бы поставить знак равенства между двумя рядами А и Б — нужно подобрать коэффициенты преобразования. В конце концов вы решаете задачу оптимизации преобразования путем подбора коэффициентов. Подавая вариативные данные, вы и подбираете наиболее близко коэффициенты преобразования (т.е. обучаете нейронку) — т.е. в матрицу преобразования записываете значения, подбирая каждый из них более точно. Это все в рамках одного слоя, дальше добавляя слои, вы уже на основе тех данных разложения принимаете их как сигнал и делаете так же... уже с ними... в конце концов имеете разложение уже нужного вам сигнала (то что вы хотите получить в качестве результата вашей сети). Если при обучении данные будут слишком отличаться, то сигнал будет не гладким, и разложение в ряд станет не возможно и получится каша в весах разложения со всеми вытекающими. В общем все очевидно.
Re[4]: Нейросеть для чайников
От: Sharov Россия  
Дата: 20.07.18 18:24
Оценка:
Здравствуйте, anton_t, Вы писали:

_>Если хочешь стать Data Scientist, то возможно, если хочешь пощупать нейронные сети как программист — тогда питон.


А вот https://www.datacamp.com/community/tutorials/keras-r-deep-learning
Кодом людям нужно помогать!
Re[2]: Нейросеть для чайников
От: sergey2b ЮАР  
Дата: 20.07.18 21:54
Оценка:
Здравствуйте, Salih, Вы писали:



S>что касается философии, то нейросети имеют очень ограниченную область применения, в первую очередь потому, что программисты возлагают большие надежды на их способность к самообучению, но при этом упускают из виду то, что эффективный характер обучения объекта подразумевает взаимодействие с этим объектом, а при взаимодействии объект ведёт себя совершенно иначе, чем при просто наблюдении. и вот тут-то нейросети наталкиваются на философский закон: нельзя познать систему до конца, если ты сам являешься её частью.

S>Мой совет: почитайте математику лежащую в основе нейросетей — она интересная, но прежде чем программировать приложения задумайтесь на сколько ваша нейросеть будет чувствительна к обучающему набору? может оператор или эвристические алгоритмы/шаблоны справятся лучше? К примеру: Abbyy по состоянию на 2006 год нейросети точно не использовала, да и сейчас скорее всего не использует.



подскажите пожалуйста что можно почитать по эвристическим алгоритмам/шаблонам
Re[12]: Нейросеть для чайников
От: Khimik  
Дата: 21.07.18 12:30
Оценка:
Здравствуйте, Erop, Вы писали:

E>И первая матрица 13х13 на 169 тоже одна для всех положений квадратика 13х13


Я вроде понял так.
Напомню, текущая задача – НС, которая распознаёт цифры от 0 до 9 на рисунке 16*16 из готового шаблона, но с произвольным сдвигом; например должно распознаваться это:



Делается НС из трёх слоёв. “Синапсы” от первого ко второму слою – это массив 256*16*10; последний индекс соответствует цифре, первый – исходному растру, второй – это массив окошек общим размером 4*4.
Например, в этом массиве слой X*1*1 выглядит, например, так:



Здесь внешние пиксели чёрные, поскольку окно имеет размер 13*13, то что за этими границами – просто обнуляется. Я рисую неточно. Вторая цифра 1 в X*1*1 означает левое нижнее окошко, третье – что распознаётся единица.

При перемножении исходной картинки 16*16 на эту матрицу синапсов получается матрица 16*10. Опять же, последний индекс – конкретная цифра которая распознаётся, первый – номер пикселя в растре 4*4.

Если на вход подавался рисунок с единицей, который изображён в начале поста, то эта матрица 16*10 будет большей частью заполнена нулями или близкими к нулю значениями, за исключением элемента 16*1: он будет равен 1.0, что означает что в пикселе с номером 4*4 картинки совпали и при перемножении растров получилось максимальное значение.

Здесь, правда, я уже изрядно запутался. Во-первых, я стал рисовать цветные рисунки, в то время как для начала проще было бы разобраться с бинарными чёрно-белыми. Во-вторых, если перемножать бинарные растры, то наверно должно использоваться умножение XOR (ноль на ноль дают один, один на один тоже дают один). А как сделать XOR для небинарных рисунков, да ещё цветных – мне непонятно.
В третьих, чтобы при перемножении совпадающих шаблонов получилось в сумме 1.0, надо ещё их отнормировать.

Но это наверно частности. Далее идёт переход от второго к третьему слою: в каждом слое 4*4 значения просто суммируются, и получается массив из 10 чисел. Если на вход подавался рисунок двойки (в любом положении), то второй элемент массива будет равен 1.

Тем не менее, а я по-прежнему не вижу философского камня фундаментального принципа НС. Возникает такой вопрос: не является ли изложенная выше НС относительно медленной по сравнению с продвинутыми НС, которых обучали по Deep Learning и которые могут распознавать гораздо более произвольные рисунки?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Отредактировано 21.07.2018 12:31 Khimik . Предыдущая версия .
Re: Нейросеть для чайников
От: alex_public  
Дата: 23.07.18 23:20
Оценка: 5 (1)
Здравствуйте, Khimik, Вы писали:

Поздно заметил данную дискуссию (только после переноса её в новый раздел форума), но всё же попробую высказать свой вариант объяснения, так сказать максимально обобщённый — вроде не видел ещё такого в данной темке.

Рассмотрим задачу распознавания (не обязательно нейронными сетями, а вообще), используя как раз твой пример с изображениями цифр. В общем случае эта задача означает, что нам надо написать некий алгоритм у которого на входе есть вектор значений X, состоящий из N элементов (для картинки в градациях серого N=W*H), а на выходе вектор Y, состоящий из М элементов (для твоей задачки M=10 — по количеству распознаваемых объектов). Т.е. по сути нам надо задать M функций вида y_i=f_i(X, P), где P — это вектор параметров из К элементов (К определяется видом алгоритма и может быть вообще равно нулю). При этом имеется набор входных значений X_0 (образцы цифр в твоём случае), для которых известны правильные значения Y_0 (указание цифры на образце). Под такую формулировку можно подвести все подобные алгоритмы, а не только нейронные сети. Например помнится я решал почти (только там задавалось не изображение, а путь пера) твою тестовую задачку с помощью алгоритма DTW и получалось получше нейронные сетей.

Теперь посмотрим как в это укладываются нейронные сети. Собственно нейронные сети задают некий большой класс таких вот функций f_i(X, P), с одним довольно простым, но очень полезным свойством. А именно, если мы берём в качестве нашего алгоритма набор функций f_i(X, P), являющийся нейронной сетью, то мы автоматически получаем готовый (причём даже не в математическом смысле, а прямо в физическом — можно банально скачать готовый код) алгоритм для вычисления вектора P по набору данных X_0, Y_0. Выполнение этого готового алгоритма и называют собственно обучением нейронной сети.

Вроде бы это всё звучит крайне банально, но если ты взглянешь на все остальные алгоритмы в данной области, то увидишь, что в лучшем случае там надо подбирать руками множество неочевидных параметров, а в худшем случае подбирать вообще код. Так что возможность просто скачать, запустить и получить в итоге готовый алгоритм выглядит прорывом в данной области, причём именно с точки зрения прикладного бизнеса. Потому как вполне реально что какой-то ручной алгоритм выдаст результаты намного лучше нейронной сети, но пока его будут делать, нейронная сеть будет уже несколько лет продаваться и приносит прибыль...
Re: Нейросеть для чайников
От: Lepsik Индия figvam.ca
Дата: 02.10.18 20:27
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Я прочитал одну книгу про нейросети, и по-прежнему осознаю, что не понимаю, что это такое. Т.е. я вижу, что нейросети “думают” принципиально другим образом, чем программы, которые мы пишем, но ничего конкретнее сформулировать не могу.

K>Я хотел бы написать на Delphi простую нейросеть, например распознающую буквы. Прошу подсказать хорошие книги и обучающие видеокурсы.

https://habr.com/post/85121/
Re: Нейросеть для чайников
От: c-smile Канада http://terrainformatica.com
Дата: 07.10.18 15:55
Оценка:
Здравствуйте, Khimik, Вы писали:

От профессора Соловьева А.Е.

http://prof9.narod.ru/doc/076/index.html
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.