Re[6]: Нейросеть для чайников
От: Khimik  
Дата: 16.07.18 11:33
Оценка:
Здравствуйте, The Passenger, Вы писали:

TP>нет просто если при какихто обстоятельтсвах — давление, температура, облачность, время года, время дня и т.д. — шел дождь в 90% случаев.

TP>то тогда вероятность дождя — 90% ... вот и все, никакой магии

Ну вот я и говорю — что мешает обычному программисту перевести эти 90% в математическую модель на компьютере? А нет, человеческий умишко на это слабоват...
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
Re[7]: Нейросеть для чайников
От: Young yunoshev.ru
Дата: 16.07.18 11:39
Оценка: +1
Здравствуйте, Khimik, Вы писали:

K>Здравствуйте, The Passenger, Вы писали:


TP>>нет просто если при какихто обстоятельтсвах — давление, температура, облачность, время года, время дня и т.д. — шел дождь в 90% случаев.

TP>>то тогда вероятность дождя — 90% ... вот и все, никакой магии

K>Ну вот я и говорю — что мешает обычному программисту перевести эти 90% в математическую модель на компьютере? А нет, человеческий умишко на это слабоват...


Именно в конкретном случае спорное утверждение.
Т.е. если у нас есть малое количество входных параметров, и в качестве выходы просто вероятность одного из двух событий, то мне сложно представить нейроную сеть которая бы работала успешно, но которую нельзя было бы повторить другой моделью "обычным" программистом — например теже самыми деревьями и т.п.
Re: Нейросеть для чайников
От: Vladek Россия Github
Дата: 16.07.18 11:59
Оценка: 11 (3) +1
Здравствуйте, Khimik, Вы писали:

K>Интерес у меня скорее теоретически-философский – понять, какой принцип лежит в основе работы нейросетей, как они “думают”. Ну и какие у них принципиальные преимущества перед обычным кодом с алгоритмами.


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

Вот книжка, вполне удобная для понимания: https://www.ozon.ru/context/detail/id/34342336/
Отредактировано 16.07.2018 12:01 Vladek . Предыдущая версия .
Re[8]: Нейросеть для чайников
От: The Passenger СССР  
Дата: 16.07.18 12:03
Оценка:
Здравствуйте, Young, Вы писали:

Y>Именно в конкретном случае спорное утверждение.

Y>Т.е. если у нас есть малое количество входных параметров, и в качестве выходы просто вероятность одного из двух событий, то мне сложно представить нейроную сеть которая бы работала успешно, но которую нельзя было бы повторить другой моделью "обычным" программистом — например теже самыми деревьями и т.п.

вот именно поэтому сети и работают с бигдатами — без данных, сеть — просто набор мусора

и да — я полагаю функциональность сетей можно повторить и без сетей ... просто с сетяме проще ... иногда намного
Re[2]: Нейросеть для чайников
От: sharpcoder Россия  
Дата: 17.07.18 08:35
Оценка: +1
Здравствуйте, Vladek, Вы писали:

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


K>>Интерес у меня скорее теоретически-философский – понять, какой принцип лежит в основе работы нейросетей, как они “думают”. Ну и какие у них принципиальные преимущества перед обычным кодом с алгоритмами.


V>Нейросети применяются для замены алгоритмам, которые трудно формализовать (и соответственно реализовать). Ничего они не думают, это просто чёрный ящик, который настроили до нужной точности результатов.


Ничего не черный. Вполне себе прозрачный. Смотрел как оаботают наши нейросетевики, как анализируют процесс обучения, структуру и пр. В общем там все по слоям можно увидеть, что каждый слой делает. Можно из обученных сеток склеивать новые. Можно рисовать тепловые карты и смотреть на основе какой информации нейросеть «принимает решение» и тп.
Re[7]: Нейросеть для чайников
От: Sharov Россия  
Дата: 17.07.18 09:05
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Ну вот я и говорю — что мешает обычному программисту перевести эти 90% в математическую модель на компьютере? А нет, человеческий умишко на это слабоват...


Ну так и было сделано, с соотв. результатом.
Кодом людям нужно помогать!
Re[3]: Нейросеть для чайников
От: Khimik  
Дата: 17.07.18 09:28
Оценка:
http://rsdn.org/forum/philosophy/7198783.all
Автор: Khimik
Дата: 17.07.18
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
Re[3]: Нейросеть для чайников
От: Sharov Россия  
Дата: 17.07.18 09:32
Оценка:
Здравствуйте, Khimik, Вы писали:

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


vsb>>Я бы начал отсда: https://www.coursera.org/learn/machine-learning


K>Не хочу пока на английском, надеюсь что найдётся альтернатива на русском. От английского я слишком устаю.

K>Хотелось бы всё-таки найти хорошее видео на русском.

Пытаюсь сейчас читать эту книгу, крайне советую.
Кодом людям нужно помогать!
Re[2]: Нейросеть для чайников
От: Erop Россия  
Дата: 17.07.18 09:47
Оценка:
Здравствуйте, Salih, Вы писали:

S>почитайте вот это с тех времён нейросети не продвинулись, если не сможете скачать, то напишитие в личку.

Продвинулись очень сильно...

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


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

Во-первых, рекурентные сети придумали очень давно.
Во-вторых, после того, как придумали LSTM, их ещё и учить научились
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Нейросеть для чайников
От: Erop Россия  
Дата: 17.07.18 10:03
Оценка:
Здравствуйте, The Passenger, Вы писали:

TP>вот как раз для прогноза погоды, при наличии достаточного количества данных, нейронные сети — самое оно


С синтетикой будут проблемы...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: Нейросеть для чайников
От: De-Bill  
Дата: 17.07.18 10:24
Оценка:
S>Ничего не черный. Вполне себе прозрачный. Смотрел как оаботают наши нейросетевики, как анализируют процесс обучения, структуру и пр. В общем там все по слоям можно увидеть, что каждый слой делает.

Нейронные сети не ограничиваются свёрточными, а задачи, которые с помощью них решают, не ограничиваются обработкой изображений. Как, например, понять, что делает fully connected neural network из нескольких уровней, которая по 20 показателям прибора в скважине рассчитывает 21й?
Re: Нейросеть для чайников
От: Erop Россия  
Дата: 17.07.18 11:00
Оценка: 13 (4)
Здравствуйте, Khimik, Вы писали:
K>В интернете приводятся примеры в основном на Питоне, я надеюсь Delphi тоже вполне подходит для такой задачи. Если Питон – более высокоуровневый язык и это достаточно важно, может мне сначала нужно выучить Питон.

1) Верно ли я понимаю, что ты знаешь что такое матрица, тензор (многомерная матрица, преобразование координат нам не потребуется), линейный оператор, нелинейный оператор?
Если да, то на каком-то уровне приближения, и если ограничится сетями для обработки изображения, более или мене любую сеть можно представить в виде последовательности линейных и нелинейных операторов действующих из пространства трёхмерных тензоров одного размера, в пространство 3-х-тензоров другого размера.

Размерности тензоров -- ширина изображения х высота изображения х число каналов.

Нелинейные операторы (слои активации) это какие-то функции, которые вносят в систему нелинейность. Например отображают XxYxN в такие же XxYxN, но по правилу, что если на входе отрицательное значение, то на выходе ноль, а если на входе неотрицательное, то оно сохраняется.

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

Линейные же слои, тоже имеют хитрость. Иногда бывают слои с X1xY1xN1xX2xY2xN2 независимых коэффициентов (тут X1xY1xN1 -- входной тензор слоя, а X2xY2xN2 -- выходной)
Обычно они называются полносвязными (Dense), но сети из таких слоёв имеют много проблем.
а) нельзя менять размер входных/выходных тензоров
б) очень плохо обучаются и глубокую сеть (много слоёв) из таких штук не обучишь.
Поэтому придумали много разных хитрых ограничений на эти операторы. Иногда их делают разряженными, например блочно-диагональными, иногда делают доп. условие, что какие-то коэффициенты совпадают и т. д. Это даёт разные слои (cnn, например)
Хорошей особенностью CNN является то, что там один и тот же набор коэффициентов (ядро) применяется к разным местам (x, y) входного тензора. То есть можно менять размеры входного тензора, используя одно и то же ядро.

Ещё есть нелинейные слои, которые берут и отображают 2Xx2YxN в XxYxN, путем выбора из квадратика 2x2 обычный подход -- выбор максимального значения.

В общем, если посмотреть на это всё с такой точки зрения, то получается, что имеем на входе картинку буквы, например, 28x28x3 (RGB), после первого слоя линейного и слоя активации имеем "картинку", например 26x26x32 — тут 27 -- размер картинки, так как нам для применения ядра пришлось отступить от края на 1 пиксель, в 32 -- число каналов. Смысл этих каналов, примерно соответствует признакам признакового классификатора.
Теперь можно поставить слой пуллинга, который отобразит наш 26х26х32 на 13х13х32, так как из каждого квадратика 2х2 оставит только самое большое значение.
Потом ещё раз можно поставить линейный слой, который уже 64 признака вычислит, например, пуллинг и активацию. И т. д.

В конце можно поставить полносвязанный слой который отображает на 1х1х10 (10 -- число разных цифр, а величина канала -- степень похожести входной картинки на цифру)

Вот мы и получили совсем простую сеть для классификации. Но, что бы её учить, нужно ещё придумать функцию потерь -- функцию, которая покажет, насколько тот или иной ответ сети близок к правильному (к ground truth). Для задач классификации хорошо подходит кросс-энтропия.

Правда перед кросс-энтропией, стоит поставить ещё один слой активации soft-max, называется, который приводит все значения к диапазону 0..1, так что самый большой становится близок к 1, а остальные ближе к 0 смещаются. Иногда эту формулу вставляют в саму функцию вычисления потерь, иногда как отдельный слой ставят.

Ну и нужно где-то добыть dataset с картинками цифр, которые мы будем классифицировать. Ну и нам надо знать какая картинка какую цифру изображает.
Можно разделить dataset на три части -- обучающую тестовую и контрольную. Обучающую и тестовую использовать в процессе

Теперь, когда у нас есть сеть (архитектура), функция потерь и dataset, надо понять, как это учить.
Общая идея такая, что обучающий dataset мы будем случайно делить на пакеты, например по 128 изображений (можно больше), и градиентным спуском пытаться подобрать коэффициенты в сети так, что бы уменьшить суммарные потери на всё пакете, потом на другом пакете, на третьем, и так до исчерпания dataset, или ещё до какого-то момента. Обычно эта процедура называется "эпоха", и после каждой эпохи хорошо бы прямым прогоном сети проверить результаты на тестовой выборке. Так как иногда стохастический градиентный спуск заходит в локальные глубокие экстремумы и для обучающей выборки потери уменьшаются, а для тестовой -- нет. Тогда стоит что-то поменять, например алгоритм обучения (например на метод сопряжённых градиентов или ещё как)

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


2) Вот там выше я очень кратко описал то, что нужно для одной классической задачи для нейросетей.
Смотри, этот пирог очень большой и состоит и многих "коржей"
2.1) Слои, архитектуры сетей
2.2) функции потерь (loss)
2.3) dataset — сбор, подготовка, подготовка синтетических datasets, что бы обучить на них, а потом доучить на реальных данных
2.4) Алгоритмы обучения
2.5) Аугментация (не знаю, как по-русски augmentation, это когда по реальным данным делают синтетические, например, если мы распознаём буквы в RGB, можно перевести картинку в цветовое пространство HSV и там "повращать" H и "пошевелить" S)
2.6) Манипуляции с самим сетями. Ну там обучить какие-то слои на одном dataset с какой-то функцией потерь, а потом другие слои на другом и с другой.
Или что-то вроде того

На самом деле писать алгоритм обучения или функцию потерь не особо интересно, писать свои слои интереснее, но это требует предварительного въезда в тему и т. д.
Собирать datasets тоже интересная и сложная задача, но с нуля тоже трудно сделать
Поэтому я тебе советую прочитать "укус питона", заботать numpy, поставить анаконду или юпитер(это если ты на винде, но на линуксе с этим всем проще)
Поставить keras поверх tensorflow и взять оттуда в качестве dataset MNIST (рукописные цифры) а в качестве примера AlexNet и посмотреть как оно работает, учится и всё такое, посмотреть/поотлаживать реализации слоёв и т. д.
А потом уже пробовать приписывать туда что-то своё и смотреть как оно влияет.
После этого можно взять какую-то реальную задачу и попробовать сделать тоже самое (фишкой MNIST является то, что на нём обычно учится всё жизнеспособное, в отличии от реальных задач и datasets)

Потом можешь попробовать понять, как работает tf (это символные вычисления. Когда ты собираешь сеть, tf запоминает граф вычислений, а потом обучалка сети по этому графу решает задачу обратного распространения градиентов)

Потом научиться писать свои лоссы и оптимизационные алгоритмы, потом свои слои и т. д...

Но, если пайтон тебе прямо вот не нравится и всё, хотя по нему много инфы как раз по задаче прототипирования нейросетей, и есть удобные фремворки, можно взять С++ и фремворки для С++ tf, например, есть и под С.
Про Дельфи не знаю, но мне кажется, что на дельфи тут стоит забить. Главное понять как в пайтоне работает numpy
Остальное и так поймёшь, по ходу пьесы

Да, для кераса пайтон (их есть два сильно разных, 2-й и 3-й) нужен 3-й, 3.5 что ли сейчас просят, но лучше в требованиях посмотри.

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

E>Ну и в целом удачи!


Да, придётся всё-таки для начала почитать книжку...
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
Re[3]: Нейросеть для чайников
От: Erop Россия  
Дата: 17.07.18 11:54
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Да, придётся всё-таки для начала почитать книжку...

Если ты про питон, то не надо особо парится. В рамках того, что тебе надо будет, тебе только numpy будет не понятно. Его и заботай.

А если ты про DL, то книжек пока толковых нет, или мало. Так что лучше качай, запускай и пробуй шевелить.
Остальное по моему конспекту просто смотри, и всё поймёшь.


Потом и книжку лучше поймёшь, кстати.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Отредактировано 17.07.2018 11:58 Erop . Предыдущая версия .
Re[5]: Нейросеть для чайников
От: The Passenger СССР  
Дата: 17.07.18 14:15
Оценка:
Здравствуйте, Erop, Вы писали:

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


TP>>вот как раз для прогноза погоды, при наличии достаточного количества данных, нейронные сети — самое оно


E>С синтетикой будут проблемы...


можно чуть подробнее?
Re[6]: Нейросеть для чайников
От: Erop Россия  
Дата: 17.07.18 23:19
Оценка: 2 (2)
Здравствуйте, The Passenger, Вы писали:

E>>С синтетикой будут проблемы...


TP>можно чуть подробнее?


Ну, обычно, при обучении сетей, находятся систематические какие-то данные, для которых реальных данных не хватает. Ну, там, ураганы в год особо активного Солнца, например. Соответственно, обычно в таких случаях выручает аугментация и просто синтетические данные для предобучения.
А в погоде и с тем и с другим не совсем ясно что делать...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Нейросеть для чайников
От: Nikе Россия  
Дата: 17.07.18 23:52
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Надо понимать, что нейросети известны уже давно, я лет 15 назад читал книгу по нейросетям. Но пользу они начали приносить недавно после изобретения некоторых прорывных алгоритмов обучения.


Ага, монте-карло
Не, прорыв произошёл, когда суперкомпы в каждый дом проникли, а все алгоритмы ещё в СССР были придуманы.
Нужно разобрать угил.
Отредактировано 17.07.2018 23:52 Nikе . Предыдущая версия .
Re[4]: Нейросеть для чайников
От: Erop Россия  
Дата: 18.07.18 00:02
Оценка:
Здравствуйте, De-Bill, Вы писали:

DB>Нейронные сети не ограничиваются свёрточными, а задачи, которые с помощью них решают, не ограничиваются обработкой изображений. Как, например, понять, что делает fully connected neural network из нескольких уровней, которая по 20 показателям прибора в скважине рассчитывает 21й?


1) сколько нейронов на уровнях? Вход, как я понял, 20, выход -- 1, а между?
2) как и с какой функцией потерь учили?
3) активация RELU?


С большой вероятностью кусочно-линейно аппроксимирует...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: Нейросеть для чайников
От: Erop Россия  
Дата: 18.07.18 00:13
Оценка: 1 (1)
Здравствуйте, Nikе, Вы писали:

N>Ага, монте-карло

N>Не, прорыв произошёл, когда суперкомпы в каждый дом проникли, а все алгоритмы ещё в СССР были придуманы.

Ну ладно уж, все. CNN Ле Кун в 1988 предложил, это ещё в какой-то степени при СССР было, но не в нём, таки.
LSTM -- 1997
AlexNet (первый удачный пример DL) -- 2012
Какой-нибудь Mask-RCNN или pixel-link -- 2018

Всё ещё только начинается
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Отредактировано 18.07.2018 0:19 Erop . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.