Данная публикация служит пояснительным материалом к предыдущей, а так-же самостоятельной для тех, кто читает по данной теме мои публикации впервые.
Сначала о том, каким алгоритмом я планирую заменить в своих работах свёрточные нейросети. Чтобы это работало быстро - нужны карты трассировок. Линии трассировок на карте расположены параллельно под определённым углом на каждой карте - так и происходит условная поляризация. Генератор карт работает быстро и генерирует он карты трассировок направленных прямыми линиями, обрыв каждой линии он отмечает в данных. То-есть сначала запускатеся генератор карт и генерирует картинку, данная анимация существенно отличается от работы генератора и показывает только его ТЗ - в каждом пикселе карты записать координаты следующего пиксела и обозначить в данных окончание каждой линии. Изображения я взял небольшие, но тем не менее файлы анимации достаточно увесистые. Допустим что обрабатываемые изображения будет 7*7 пикселов, а карт трассировок всего четыре, тогда ТЗ генератора примерно будет выглядеть так, но на самом деле его алгоритм намного сложнее и работает на много быстрее - он ничего практически не считает и выдает большие объёмы данных автоматически, но об этом позже, а пока так чисто визуально
Здесь четыре слоя - четыре карты, линии трассировок разных карт расположены с интервалом 45 градусов. Сам код генератора пока может от 0-90 для любых размеров обрабатываемых изображений, но с ограничем высоты изображения - не менее трёх пикселов, так как я вместо блака проверки условий if вставил свою формулу от математической логики - так проще и быстрее. Можно было алгоритмом Брезенхема, но для поставленной задачи он абсолютно аутичен - медленнен. Ниже я разберу алгоритм своего генератора, но пока о алгоритме замены свёрточных нейросетей.
Алгоритм обрабатывающий изображение следует по пикселам согласно трассировкам по картам, где у него обозначен конец каждой линии, как только на изображении соотвествующий пиксел окрашен в искомы свет, алгоритм на своём "поляризованном" слое увеличивает вес этого пиксела и увеличивает вес пикселов линии пока не встретит пустой пиксел на изображении, или не кончится линия, после чего вес обнуляется. В реализации может быть немного иначе, но ТЗ алгоритма, читающего изображение, именно такое. Слои 1-4, это поляризованные слои алгоритма, 5 - изображение.
Вот три анимации того, как это визуализируется. Тут движение в обратном направлении, в противоположность алгоритму генерирующему карты.
Что такое свёрточная нейросеть в моём понимании - нечто определяющее и разделяющее данные о размерах линий, пересечениях и образуемых углах.
На примере обработки изображения с цифрой 8 можно выделить что имеются вершинообразующие пикселы, принадлежащие на разных слоях линиям с большим весом. Данные об углах в данной визуализации связываются с расстоянием между поляризованными слоями. Это примерно так, перечёркнуты вершинообразующие пикселы -
И то и другое легко вычисляется, так например коэфициент вершинообразования сложением весов пиксела на разных слоях, вычислить расстояние между полярными слоями - так же не сложно. Можно добавить методы вычисления дуг и другой метаинформации, но публикация не о перспективах и полном списке возможностей, а пояснительная.
Далее по генератору карт, тракотороподобному, но быстрому, изображение старое - поэтому в грязи и пыли ;).
Алгоритм-генератор карт записывает от пиксела входа в какой следующий пиксел следовать алгритму-читателю. Делает он это так, буд-то бы идёт от конца карты к началу и записывает в каждый пиксел сведения координат где только что был, НО, на самом деле всё не так, потому что такой метод требует больших затрат, и реализовано всё иначе - построчно: никаких углов, а вместах скоса алгоритм предполагает-координаты откуда мог попасть в текущий пиксел при таком-то наклоне линии. Тогда для всей карты ничего не надо считать абсолютно, так как скос всегда один - шаг вверх (по машинным координатам Y, где верх - это низ) и шаг вправо. А что-же тогда считать? Считать остаётся всего один правый столбец, для которого формула весьма тривиальна, привожу не для разложения, а для визуальной оценки
TracerX := RazmerX - (stepFrequent * y + znak *trunc(y / (stepsBig+1)));
, и самую нижнюю строку, вот тут вот намного сложнее, так как сляпал на скорую руку какую смог математическую логику, что намного проще чем мудрить с набором операторов if ... else ... и заниматься самовыносом мозгов самому себе, пусть лучше математика сама себя вывозит
TracerX := x - ( znaksign(trunc((1+sign(y-trunc(y/(stepsBig+1))(stepsBig+1)-steps)/2))) + stepFrequent * y + znak * trunc(y / (stepsBig+1)))+1;
.Сложность расчёта последней строки связана с вычислением положения изменённого шага скоса и возможно что формулу можно сделать изящней и несколько с иным смыслом, но я сильно не заморачивался, ведь это егенератор карт, этап пока что только наработка и отладка, а сами карты можно сохранять и использовать многократно.
Проект выложен тут
https://github.com/Andrei-Y/A-trace-map-generator
Папка для скачивания
Интерфейс программы, скрин с фоном стола редим отладки
Нажатие на Buton2 запускает проверяющий алгоритм, который следует по координатам записанным в полях ячеек таблица (поля разделены запятой), ноль в третьем поле - ничего не означает, единица - окончание линии трассировки.
Результат работы проверяющего алгоритма - записывает точки и ставить симовол X в ячейке где обрывается линия.
Пока всё. генератор не доделал до полной развертки от 0 до 180 градусов, так как отвлёкся на пояснительный материал. Генератор быстрый, почти молниеносный, но так-же может сломать мозг. Приведу ядро движка генератора, язык программирование FPC Lazarus.
repeat
//////////////////////////////////////////////////////////////////////////////////////////////////
{%REGION 'Engine'}
asm
JMP p
end;
p1:
StringGrid1.Cells[px^, py^] :=
IntToStr(pTracerX^) + ',' + IntToStr(pTracerY^) + ',' + '1';
//запись правого столбца
p := @p3;
goto p4;
p2:
x1:=x+1;
y1:=y+1;
StringGrid1.Cells[px^, py^] := IntToStr(px1^) + ',' + IntToStr(py1^) + ',' + '0';
//автоматическое забивание координат в местах скоса трассы
p := @p3;
goto p4;
p3:
x1:=x+1;
y1:=y;
StringGrid1.Cells[px^, py^] := IntToStr(px1^) + ',' + IntToStr(py1^) + ',' + '0';
//автоматическое забивание координат трассы на прямых участках
p4:
Dec(x);
{%ENDREGION}
until x < Biger;
Скажу сразу что на этом коде всякие блюстители этикета кода вывихнут себе окончательно себе мозги, так как этот код концептуальный, в нём идея, и её нужно понять прежде чем понять то, как это работает. На C или C++ при распараллеливании этот код будет ещё стремительнее, он и так ничего не делает кроме одного столбца и одной строки из всей карты. Алгоритм Брезенхема не предназначен для текущего ТЗ. Ну и собственно с обработкой изображения я ожидаю такого-же эффекта в сравнении с свёрточными нейросетями. Ядро движка немного пришлось изменит при переходе на интервал 0-90 градусов. Далее ещё будет немного. Код самого движка тут под спойлером, остальной код в папке по ссылке что ранее, если у кого-то будет желание почитать и проверить
Hidden text
repeat
repeat
asm
JMP logic
end;
logic1:
logic := @logic2;
goto logic4;
logic2:
Edge := @Edge3;
logic := @logic3;
logic3:
TracerY := y - steps1;
TracerX := 0;
if TracerY < 0 then
begin
TracerX := RazmerX - (stepFrequent * y + znak *trunc(y / (stepsBig+1)));
if TracerX < 0 then TracerX := 0;
TracerY := 0;
end;
logic4:
steps := stepsBig;
repeat
if steps = 0 then
begin
Biger := x - stepRare+1;
steps := stepsBig+1;
end
else
begin
Biger := x - stepFrequent + 1;
end;
if Biger < 0 then Biger := 0;
repeat
//////////////////////////////////////////////////////////////////////////////////////////////////
{%REGION 'Engine'}
asm
JMP p
end;
p1:
StringGrid1.Cells[px^, py^] :=
IntToStr(pTracerX^) + ',' + IntToStr(pTracerY^) + ',' + '1';
//запись правого столбца
p := @p3;
goto p4;
p2:
x1:=x+1;
y1:=y+1;
StringGrid1.Cells[px^, py^] := IntToStr(px1^) + ',' + IntToStr(py1^) + ',' + '0';
//автоматическое забивание координат в местах скоса трассы
p := @p3;
goto p4;
p3:
x1:=x+1;
y1:=y;
StringGrid1.Cells[px^, py^] := IntToStr(px1^) + ',' + IntToStr(py1^) + ',' + '0';
//автоматическое забивание координат трассы на прямых участках
p4:
Dec(x);
{%ENDREGION}
until x < Biger;
asm
JMP Edge
end;
Edge1:
//подсчёт шагов в первой строке - других расчётов для первой строки не требуется и знание этого значения нужно для последней строки
Inc(steps1);
goto Edge3;
Edge2:
//трассировку начальной ячейки каждого шага последней обрабатываемой строки кроме правого столбца
if RazmerX > RazmerY then begin
Dec(steps1);
TracerX := x - ( znak*sign(trunc((1+sign(y-trunc(y/(stepsBig+1))*(stepsBig+1)-steps)/2))) + stepFrequent * y + znak * trunc(y / (stepsBig+1)))+1;
if TracerX<1 then begin
TracerY := y - steps1;
TracerX := 0;
if TracerY < 0 then TracerY := 0;
end;
end else begin
Dec(steps1);
TracerY := y - steps1;
TracerX := 0;
end;
p := @p1;
goto Edge4;
Edge3:
p := @p2;
Edge4:
Dec(steps);
until x < 0;
Inc(y);
yf := y + 1;
p := @p1;
x := xRazmerX;
until y > yRazmerY - 1;
Edge := @Edge2;
until y > yRazmerY;
Думаю что данный пояснительный материал вносит какую-то ясность о том, как мой алгоритм ничего не делая справляется с своим ТЗ. Ну и хоть какую-то по паланам замены свёртков. Всем спасибо за внимание, думаю и так понятно что быстрых результатов от меня ожидать не стоит, так как всё делаю в послерабочее время, которого совсем мало для подобных вещей.
Всем всего доброго и успехов.
Комментарии (40)
iShrimp
25.06.2023 14:47Алгоритм машинного зрения должен быть устойчив к помехам. Он должен обнаруживать ровно то, что от него требуется. Что выдаст ваш алгоритм, если на изображении будет большая область, залитая искомым цветом?
Какова его задача? Должен ли он обнаруживать границы областей (blob detection) или тонкие линии (edge detection)?
accurate_random Автор
25.06.2023 14:47Этот алгоритм должен будет выполнять только замену сверточных нейросетей по задачам которые обозначены в публикации: определение длин линий, образуемых вершин и величин углов, дальше данные будут поступать на обработку более сложную, сверточные нейросети сами по себе тоже не выполняют всех функций зрительного аппарата. Тонкие линии? Данный метод служит только для извлечения данных, их обработкой будет заниматься другое (другое-потому что на альтернативы обычных нейросетей у меня тоже есть наработки,хоть и по-меньше). Об этом писалось в публикации.
venanen
25.06.2023 14:47+3Если Вы действительно имеете наработки по замене сверток на что-то новое - это очень круто, желаю успехов, надеюсь получится.
Но по тексту - Вы же его не только для себя пишите, а как статью, чтобы ее почитали. Я прочитал раз 5-6, чтобы понять какие-то базовые вещи, но как это все работает я так и не понял. Карты трассировок это что? И хоть я понял, раза с третьего, что это, видимо, аналог слоя в сети, но стоило бы это написать. И так по всему тексту - у меня появилась аналогия с теми картинками, которые показывают, как видят люди при инсульте - вроде все знакомое, алгоритм, даже код есть, картинка, а все вместе не складывается. И вероятнее всего проблема в неполноте информации, много терминов, значение которых не ясно (что такое частый шаг, что такое редкий, зачем они, почему между ними именно такое расстояние, как его определить). Или вот: "реализовано всё иначе - построчно: никаких углов, а вместах скоса алгоритм предполагает-координаты откуда мог попасть в текущий пиксел при таком-то наклоне линии. " - скос чего? Линии? Скос как угол, или скос как фаска? И как может быть скос, если нет никакого угла?
В общем, я Вас прекрасно понимаю, я тоже не писатель, поэтому даже электронные письма и коменты в коде по 3-4 раза перечитываю и правлю, чтобы было понятно кому-то кроме меня. Но с этим надо бы поработать, довести до ума алгоритм, и ждем демонстрацию, потому что такие решения - это действительно крайне интересные направления исследований. Успехов.accurate_random Автор
25.06.2023 14:47В публикации написано что имею наработки по замене нейросетей обычных, а не сверточных, обычные нейросети так-же определены в общей теории нейросетей. Круто это или нет я не знаю, но некоторые базовые вещи публиковал давно, хоть и не на Хабре (метод "поляризации" мной был описан в марте прошлого года, а наработки по обычным нейросетям чуть ранее, это было в моём блоге на портале программистов и системных администраторов). По сверткам: в публикации этой описано какие задачи решаются данным методом, так-же описано и для чего служит генератор карт, в публикации нет только описания алгоритма Брезенхема...но он описывается быстро - для текущего ТЗ, да и вообще, ему нужен расчёт координат каждого пиксела, а моему только правого столбца пикселов и их нижней строки. Что касается работы - согласен: очень много ещё впереди.
accurate_random Автор
25.06.2023 14:47Что касается "если скоса нет", то значит нет и искомого формулой изменённого шага (не путать с размером изменённого шага) в нужном интервале, а значит всё как обычно кроме значений некоторых переменных. Эту формулу рассматривать долго - это отдельная тема с отдельным графическим материалом, у меня не мастер класс и нет на это времени, поверьте - это работает. В тексте говорилось что формулы приведены в нём чисто для визуальной оценки.
accurate_random Автор
25.06.2023 14:47Напишу отдельно про движок генератора, рассмотрю формулы, просто теперь это не сложно когда ключи анимации все готовы, и делать нового почти не надо из графического пояснительного материала, остался только минимум. Я не думал что всем прям так будет интересен алгоритм Брезенхема и его отличие от моего, ну или наоборот мой и его отличие от алгоритма Брезенхема. Поэтому графического пояснительного материала больше сделал по поляризации. Хорошо, между делами дня за два сделаю публикацию чисто по генератору и алгоритму Брезенхема, с детальным рассмотрением формул, ну или почти детальным, раз так многим оказалось это важно. Я просто больше на графический материал делаю упор, важнее представлять себе как работает принцип, с этим представлением код читать намного проще, и анимация тут не маловажна.
accurate_random Автор
25.06.2023 14:47Хотя нет, просто следующая публикация будет большая, с гиперссылками. И думаю что она будет после первых опытов с MNIST. Поэтому я не стану рассматривать алгоритм движка в отдельной публикации. Просто сделаю потом большую публикацию с гиперссылками. Так лучше чем отдельными кусочками.
VPryadchenko
25.06.2023 14:47+2Я бы хотел Вас попросить не игнорировать прочие комментарии под статьями касательно формы подачи информации. Даже если они кажутся местами токсичными, в них есть кое-что общее и рациональное. Подумайте хорошо над структурой статьи, над постановкой задачи, над пояснением относительно терминов, не устоявшихся или не используемых в данной предметной области. Этого всего не хватает, чтобы понять Вашу статью с первого раза (и даже после нескольких попыток)
accurate_random Автор
25.06.2023 14:47Спасибо. Хорошо, я учту впредь. Только работы у меня получится и вправду очень много, ну ничего, это всё ничуть не сложнее будет чем додуматься и до таких простых вещей, просто дольше по времени. Электрогенератор без ротора (колесо с магнитными) сделаю, чисто ради эксперимента
Рендер переделаю, сейчас у меня компьютер помощнее, а колесо - лишнее.
Вот тоже, тоже гидросистема, только первую публикацию что за месяц ранее - удалили, возможно по просьбе сотрудников ФИПСа, так как при подаче заявки они мне сместили дату поступления материала на месяц, и от первой публикации не прошло пол года согласно правилам, чтобы публикация по правилам патентования попадала под защиту заявкой, они не захотели регистрировать дату материала по поступлению факсом, хотя согласно правилам патентования - обязаны.
Оставили мне мои-же вторячки, первая публикация была 27.06.2019
Как-то так - к простым людям требования завышены, а руководитель отдела потребителя ФИПС запросто заявила что с заявкой занимайтесь сами, я с ней заниматься не хочу.
Ну ладно - у каждого свой крест и каждого крестили его именем.
ivankudryavtsev
Ничего не понятно... а самое главное, чем нейросети не угодили?
accurate_random Автор
Вы не дочитали заголовок, что только свёрточные нейросети. Чем не угодили свёрточные нейросети...? Идеи нет в них, взяты от биологических оригиналов. Заменяющий их алгоритм , предположительно, будет быстрее, по крайней мере с оной целью создавался.
ivankudryavtsev
У вас русский не родной? Заголовок невозможно осознать. Как я должен понять "поляризация машинному зрению...". Для? В? Помогает? Применяется?
Быстрее это сколько? ResNet18 работает 6000FPS на современном железе для инференса. Вы что с чем сравниваете?
Почему Вы считаете, что в CNN/DNN нет идеи? Это вполне себе матаппарат с теоремами.
accurate_random Автор
Ну я и не писал заголовок с целью чтобы его осознали, просто его надо прочитать.
Над заменой свёрточных нейросетей я думал долго, я знаю что там много книг, теорем, но взято изначально от биологических оригинальных нейросетей - и это факт. Поэтому не то чтобы мне они не понравились, просто я решил приложить усилия по поиску альтернативы, и через не маленький отрезок времени - нашёл. Матаппарат свёртков не отрицаю, но думаю что он не является запретом или табу для поиска альтернативных и эффективных решений.
ivankudryavtsev
Серьезно? А Вы хороши! Так может и текст писать не стоило?
accurate_random Автор
Скорее Вам не стоило его читать, раз вы не сочли нужным читать заголовок. да и публикацию Вы как-то тоже читали невнимательно, там пишется о задачах свёрточных нейросетей, которые можно решать алгоритмической обработкой данных от метода "поляризации". Я учту впредь Ваши пожелания, извините уж, спешил, идеальный топик сразу не получается.
aamonster
Я прочитал заголовок, прочитал текст. А толку? Поток сознания, без описания алгоритма (по анимациям понять что-либо нельзя, при чём тут Брезенхэм – вообще загадка). Попробуйте переписать текст, взяв "бета-тестера" – чтобы кто-то другой говорил вам, понятно или нет.
accurate_random Автор
Алгоритм Брезенхема имеет отношение только к генератору карт, но не к алгоритму который я планирую использовать вместо свёрточных нейросетей. Вы ведь понимаете, что зрение не связано с генерированием карт? Впрочем тут как-то даже переписывание с прочтением путается некоторыми
https://habr.com/ru/articles/743758/#comment_25688286
при такой хаотичной деятельности, обвинять в хаотичном изложении - всё равно что отказываться от любых обязанностей перед обществом, выдавая его перед другими своим собственным должником.
aamonster
Ну Ok, в статье два отдельных фрагмента, по которым ничего нельзя понять. Я даже не могу исключить, что вы пишете о чём-то интересном – но понять этого нельзя, в статье недостаточно информации.
Кроме шуток – прогнали бы в следующий раз через бета-тестеров, а не сразу выкладывали. Ну типа коридорного тестирования что-то устройте – найдите благожелательно настроенного человека, который не работает с вами над этой темой (чтобы не было такого, что он понимает просто в силу того, что уже подробно знает, о чём речь), покажите текст ему и правьте, пока не станет понятно.
accurate_random Автор
например какой информации недостаточно чтобы связать графическое пояснение первого фрагмента с текстовым?
Заявить что её недостаточно - мало. Раз Вы сказали что её недостаточно - Вы должны знать или как минимум предлполагать то - какой именно. Никто тут ничего не уточнял и не спрашивал. Если не понятно абсолютно всё, как некоторые пишут, то на основании чего делается вывод о том, что информации недостаточно?
Должны быть какие-то конкретные моменты, а не абстрактные обвинения о непонятности публикации.
aamonster
Как бы вам сказать... Недостаточно – до уровня "информации практически нет".
И, извините, я не являюсь "благожелательно настроенным человеком" в такой мере, чтобы потратить несколько дней на то, чтобы погрузиться в вашу тему, узнать, что именно вы хотели написать, составить для вас план рассказа и затем отследить, чтобы все пункты плана были расписаны. Слишком много труда. Я так-то хотел статью прочитать, а не коучем работать)))
Программа-минимум – чёткое описание задачи (чего хотим, какие условия), краткое описание существующих алгоритмов со ссылками (кстати, во второй части, где помянули Брезенхэма – наверняка найдётся место для DDA, Wu lines, EFLA), описание, почему они не подходят для вашей задачи (какие условия мешают) или что в них можно улучшить, затем понятное описание вашего алгоритма и, наконец, оценка результатов (желательно со сравнением с предшественниками).
accurate_random Автор
Ну если это был заведомо вами ожидаемый уровень - значит вы не то ищите.
аналогично, не планирую угадывать ваши желания без видимых причин.
если вы ожидали описания чужих алгоритмов в сравнении - это ваше личное желание, я описал ТЗ алгоритмов и сравнил объём работы двух алгоритмов в случае алгоритма генератора и брезенхема, единственное чего сделал это не описал формул сравнения: в моём генераторе объём вычислений равен X+Y , а в случае алгоритма Брезенхема X*Y , об этом писалось в прошлой публикации. А в этой я упомянул что математические моменты не рассматриваю. Причем это сравнивается количество расчитываемых пикселов , а не операция сложения с умножением: у меня расчитывается всего строка и столбец пикселов, а у Брезенхема каждый пиксел из количества X*Y.
я не могу выкладывать материал соответствующий вашим индивидуальным пожеланиям, и соответственно даже если его выложу, то для более широкой аудитории. Для моей задачи алгоритм Брезенхема не подходит чрезмерными и ничем не опраданными расчётами, их объём чересчур велик для текущего ТЗ алгоритма, оно описано в прошлой публикации.
Вот ТЗ алгоритма генератора карт
отсюда https://habr.com/ru/articles/732092/
У алгоритма Брезенхема задача схожая, но иная, и он слишком много ресурсов потребляет конкретно для решения моего ТЗ.
ivankudryavtsev
Забейте, он для себя пишет.
aamonster
Да, я вижу.
accurate_random Автор
разумеется видите, но не читаете, а то что даже заголовок искажается - нужно прочитать.
accurate_random Автор
Не правда, правда то что Выдаже заголовки чужие переписываете на свой лад.
https://habr.com/ru/articles/743758/comments/#comment_25688286
Вы ведь знаете что такое нарушение авторского права и какие его виды бывают?
Впрочем продолжайте заниматься самолюбованием, видимо это уже патология.
Hardcoin
Интересный подход. То есть случайный набор слов тоже подошёл бы? Если осознавать написанное не требуется?
Для ЛЛ: Какой-то код написан, но результата пока нет, может будет позже. Матаппарата тоже нет, но есть пара формул "на скорую руку".
accurate_random Автор
Я писал для того чтобы его поняли, осознают несколько иные вещи: более сложные и более абстрактно связанные, те что ближе к ноуменам, но это уже раздел философии относящийся к категориям и истинам, тоже раньше думал что философия - это болтовня, но по мере ознакомления понял что это практика интеллекта. А в заголовке описывается уже оассмотренный в тексте публикации, конкретный феномен, но никак не абстрактный ноумен. Иначе говоря и проще по содержанию: смысл понимается интеллектом, а ноумен осознаётся сознанием.
ivankudryavtsev
Заголовок создается для читателя, чтобы он понял о чем статья. У вас же заголовок непонятен. Например "Метод поляризации как замена сверток в глубоких нейросетях компьютерного зрения" выглядит как то, что Вы хотели написать, но вместо признания корявости Вы гоноритесь и рассуждениями о познании занимаетесь. Не умеете писать - пишите в своей тетрадке.
И если уж Вы про философию как дисциплину ума, то как у Вас такой дремучий текст вышел? Знаете как говорят: кто ясно мыслит, тот ясно излагает.
accurate_random Автор
это выглядит как искажение вот этого
За то, что Вы себе придумываете отвечать обязаны Вы сами, а не кто-то другой. И уж точно что Ваши искажения не дают Вам никаких прав , которые Вы тут пытаетесь обрести
, теперь уже переписывая этот заголовок на свой лад.
masai
Точно так же можно сказать, что оригинальная идея самолёта позаимствована у птиц. Но устроен же он совершенно иначе.
Свёртки (кстати, в единственном числе это всё же свёртка, а не свёрток) — это только один из элементов свёрточной сети. Табу действительно нет. Есть очень успешные модели на базе трансформеров.
accurate_random Автор
Сказать можно что угодно, а я написал про сверточные нейросети то, что прочитал в учебниках по нейросетях.
masai
В учебниках приводят в качестве примера опыты МакКаллока и Питтса, которые подтолкнули к первым моделям, но это больше полувека назад было. (Кстати, модель эта, как потом оказалось, была слишком упрощённой и нейроны вообще не так работают.)
Сейчас нейронные сети нейронными просто по традиции называют. Для решения практических задач отдельные нейронные не моделируют.
В общем, там биологических идей практически и нет.
Насчёт учебников. Если эти учебники вышли до 2012 года, то можно их не читать. Если после, то очень осторожно. В этой отрасли даже прошлогодние статьи считаются устаревшими.
accurate_random Автор
это математические модели, как известно в математике одна и та-же задача может иметь множество решений, поэтому задача рассматривается отдельно и конепция свёрточных нейросетей так-же.
по части того как они работают ещё продолжают вести исследования биологи, поэтому сказано что они работают вовсе не так может быть ещё не определённое количество раз. Поэтому мне ближе решения чисто технического характера, где точно можно определяьт их актуальность для конкретного ТЗ.
Разумеется, спасибо за напоминание.
masai
Зрение устроено совершенно иначе. Каких-то биологических аналогов у современных моделей нет. Насчёт того, что в них нет идеи — это очень сильное утверждение.
accurate_random Автор
Это вывод из учебников, а не утверждение, в них написано что основная концепция Автору: можете ответить и на первую часть комментария тоже? из результатов изучения биологических нейросетей.
accurate_random Автор
Основные концепции взяты из результатов изучения биологических нейросетей, это написано в самих учебниках. Математические теории - совсем другое, я тоже не рассматриваю в публикации своих формул применяемых в коде, потому что это отдельный материал. Извините за опечатку в предыдущем ответе, писал в пути с смартфона.
masai
Вы несколько раз ссылались на учебники. Можете назвать их, пожалуйста?
accurate_random Автор
После первой-же смене операционной системы все они в случае поиска своего решения - не сохраняются, так как есть свои файлы от рендеринга до STL моделей своих и так-же кода, и много-много чего. Некоторые из учебников приходится иногда скачивать повторно только для того чтобы вставить цитатку.
Можете поверить что почти в каждом из учебников что найдёте - прочтёте что область нейросетей малоизучена и что основные концепты и начала разработок виртуальных берут начала с изучения биологических. Я смотрел несколько видео и читал несколько книг, и даже читал их математику, но - технического решения ожидаемого я не нашёл, в основном как алгоритм Брезенхема к моему генератору карт трассировок было в сравнении с ожидаемым.
"Мы называем вещи именами в зависиомости от того, что они делают" - "Основы Кибернетики" Эшби (+- по памяти процитировано). Это я не про учебник по нейросетям, а про то, как названо даже само решение техническое. Нейросети. Этим уже много сказано, пусть даже и не всё - математики там много и перекрывающих друг-друга математических решений тоже масса.
Учебники по кибернетики я тоже читал, но это я привёл не для отмазки, а для того чтобы в общем-то дать понять почему нейросети называются нейросетями, хоть и программируемыми.
Скажу сразу что в математические теории не вникал, разве что совсем чуть-чуть, читал общую концепцию свёрточных нейросетей, а математических теорий по ним-же насколько мне известно несколько, сравнивал объёмы математических расчётов. Я сам учился некоторое время в физикоматематическом классе и знаю что то или иное задание в плане математики может иметь множество решений, поэтому у меня в планах замена свёрточных нейросетей концептуальная, без присутствия каких-либо биологических аналогов, а вот уже следующие слои, после замены свёрточных нейросетей, будут обычные на первой фазе работ - с MNIST и уже после первых отладок я начну в своих решениях менять и обычные нейросети на свои системы. Наработки есть, но я даже поверхностно не хочу их описывать, так как у самого мозги слегка выворачиваются при их вспоминании.
VPryadchenko
Автору: можете ответить и на первую часть комментария тоже? Угодили нейросети или нет, а вот статья действительно написана так, что ничего не понятно. С места в карьер, без какой либо вводной. Если это продолжение, приведите, пожалуйста, ссылку на первую часть.
accurate_random Автор
Первая часть вопроса к публикации отношения не имеет и является выяснением личных отношений, не важно чьих и к чему, но это неопровержимый факт из её же текста. Первая часть? А у меня всего две публикации. Если первую не видно - дам ссылку завтра с компьютера, сейчас уже не могу.