Мои нубские вопросы по нейронным сетям

Тема в разделе "WASM.HEAP", создана пользователем _DEN_, 18 окт 2018.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Возьмем обработку изображений. У нас имеется набор картинок "было-стало", и мы хотим научить сеть восстанавливать "было" по имеющемуся "стало". Например - восстанавливать цвет по ч/б, но не суть. Пусть наша входная картинка имеет размер 1000 x 1000 пикселей, и такого же размера скрытые слои. В статьях везде приводится схема, на которой в каждый нейрон текущего слоя входят сигналы от всех нейронов предыдущего слоя:

    [​IMG]
    Даже если брать 1 пиксель = 1 сигнал, то получается, что под веса одного слоя нам понадобится (1000*1000)^2 = 1 триллион значений, и в случае float-point 64 это будет 8 терабайт - тут не каждого жесткого диска хватит чтобы работать через memory mapped file, не говоря уже о времени вычислений.

    На первый взгляд напрашиваются два возможных упрощения:

    1. Уменьшить количество нейронов на скрытых слоях. Количество самих скрытых слоев можно увеличить - количество требуемой памяти будет линейно количеству слоев, но квадратично количеству нейронов, поэтому уменьшение нейронов перетянет одеяло на себя. Например, если скрытый слой будет иметь размер 100 х 100 = 10000 нейронов, то количество весов на слое будет 10000^2 = 100 млн, что в 10000 раз меньше, чем 1 триллион. Это уже можно хотя бы просто запустить на домашнем компе.

    2. Уменьшить количество входов в нейрон текущего слоя из предыдущего. Кажется логичным, что влияние пикселя "до" на пиксель "после" обратнопропорционально растоянию между этими пикселями. То есть, значение черно-белого в правом нижнем углу влияет на цветной пиксель в левом верхнем углу в гораздо меньшей степени, чем черно-белый пиксель в том же левом верхнем углу. То есть можно связывать нейроны текущего слоя с предыдущим не по принципу "каждый с каждым", а только с теми соседями, которые находятся от данного нейрона на двухмерной сетке не далее чем какое-то расстояние: upload_2018-10-18_12-55-49.png
    Понятно, что это ухудшит результат, но непонятно - насколько? Будет ли от такого решения практическая польза? Что делают для того, чтобы работать с изображениями на домашнем компе, и работают ли вообще?
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Используйте разбиение на блоки. Либо метод скользящего окна.
     
  3. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.087
    а какой толк от этой задачи вообще??? а соединения меж нейронами могут быть самыми разными и в сущности коннектить всех со всеми смыЧла нет == даже ежль взять эдакую гипотетическую макиньку (способную тянуть такие матрицы), при такой топологии нс будет просто зашумлять саму себя. введи маску соединений и считай статистику попаданий/промахов, выдели наиболее результативные области. можно строить нс на подсетях возбуждения и подавления/торможения сигнала. впрочем, для экспериментов с нс лучше заказывать облачка == уж больно комп напружает практически при любом подходе. :)
     
  4. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    толк сеть научится восстанавливать цвета, а про зашумление - алгоритм обратного распространения ошибки - связи генерирующие шум получат мизерные коэфициенты
    --- Сообщение объединено, 19 окт 2018 ---
    чему тут удивляццо - тема обучения нейросетей изначально под кластер серваков, тот же ватсон от ibm - он очень не кислый по начинке - домой себе такой не купишь
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Ватсан был построен в 2009 году. Сейчас его производительность элементарно заменяется 1 видеокартой Hi-End класса.
    А если отказаться от НС в сторону деревьев решений, то с его задачами вообще любой комп справится.

    По поводу переизобретённых методов.
    1. Уменьшение нейронов это классика автокодировщик. Плюс за одно посмотрите стекируемые нейронные сети.
    2. Тоже есть такое Pooling называется используется как промежуточные слои в CNN

    Да и вообще НС давно строятся по принципу теории графов берут фреймвор TensorFlow, Caffee и далее лузеры начинают соединять слои, кто во что горазд.
    Так что ваша картинка безбожно устарела.
     
  6. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.087
    нет в реальном мозге таких связей и практически они не нужны ни с акого бока.. если мощей компа некуда девать, то конечно-конечно. :)
    то есть взял любой ч/б фильм и нс его раскрасит? :)

    кстати, мне любопытно: можете ли Вы указать задачу, коя не решалась бы нормально чрез статистические фильтры, но тянулась бы годно на нс?
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Pavia, спасибо.

    Теоретически - да. Практически - подозреваю, что для этого ей придется скормить половину кинематографа, а для работы ей понадобится крипто-ферма на пару десятков петафлопов.
     
  8. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.087
    для выполнения подобной задачи ни-акие нейросети и ссф не нужны == достаточно сделать алгоритм наиболее близкого цвета, то бишь к каждому оттенку серого прицепить свой цвет + можно задать полуавтоматический режим работы, тч мб достигать наиболее аутентичной раскраски. впрочем, ссф может сгодиться, если требуется разбить кадр на наборы отдельных объектов.

    ЗЫ. ссф == система статистических фильтров.

    ЗЗЫ кстати, ни одну мало-мальски приличную нс без ссф построить нельзя :)
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Чиво? Один и тот же оттенок в ч/б на самом деле в исходнике может иметь бесконечное многообразие цветов. И не просто цветов. По сути на вход нам приходит lightness, а получить из нее нужно пару hue + saturation. Алгоритм, упрощенно говоря, должен иметь набор чернобелых паттернов, и знать, какой паттерн как раскрасить. Одной только информации об оттенке недостаточно. Нужно учитывать некоторую окрестность, а то и всю картинку. Но тема не совсем об этом - я не собираюсь писать универсальный разукрашиватель, лол. Такшта в данном конкетном направлении предлагаю не углубляться.
     
  10. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.087
    потому я и упомянул про полуавтомат + разбиение кадра на объекты. но для получения эдакого мультика вполне хватит и самой тупой схемы. :)
    Ты хочешь некий универсал? :)
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Хочу вникнуть в тему чтобы иметь понимание о применимости или неприменимости НС в тех или иных задачах.
     
  12. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.087
    ссф используются для любых задач, где нет чёткой формализации иль точные вычисления слишком напряжны для макинки, а нс в сущности отросток ссф и могут использоваться для уменьшения вычислений. Однако, в большинстве случаев юзать нс нет смысла от слова СОВСЕМ, ибо генерить/ладить их требуется чрез ссф, а выч. напруга получается чрезмерной. короче, на современных макинках ии можно писать на спарках ссф + модули логики, а логику выражать чрез системы булевых уравнений.
    http://sci.sernam.ru/book_mr.php?id=29
     
  13. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.087
    а, вообще, забавно НО FUCTЪ именно бурный рост цифирьковой техники не позволил получить приличного ии == у цифирек есть куча бутыльных горлышек, кои, к примеру, могут преодолеваться чрез спарки с ам (аналоговые машины). Однако, развитие альт выч. архитектур во многом заглохло. Зато получили бредо-бредовую чуХЪню а-ля квантовые макинки.
     
  14. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    АМ заглохли по одной причине цифровой умножитель двух переменных величин в АМ гораздо больше по площади чем цифровой машине. Да и в целом менее надёжна из-за разброса параметров сопротивления.
     
  15. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.087
    простые примеры..

    1. аэродинамическая труба.
    2. бассейны для тестирования кораблей/подлодок.
    3. "тихие" (безэховые) комнаты для акустики иль эм волн.
    итд-итп
    ========
    у ам туева хуча недостатков, но имеется ОДИН ЗДОРОВЫЙ ПЛЮС (образно выражаясь) на ам подключаешься к интерфейсам самой Вселенной :)
     
  16. trsoft

    trsoft Member

    Публикаций:
    0
    Регистрация:
    18 июл 2018
    Сообщения:
    115
    _DEN_, не получиться. Преобразование цветного изображения в ч - операция с потерей информации (I=A*R+B*G+C*B). Цвет объекта определяется многими факторами, например сеть должна распознать, те увидеть небо или листву, освещение, погоду, сезонную окраску и выбрать предопределенный цвет. Хотя цветной снимок можно легко разбить на 3 чб цветовые плоскости, это ничего не дает. Яркость точек объектов зависит от цвет объекта, те не возможно получить 3 цветовые плоскости из чб изображения. Специалисты восстанавливают цвет кадра (и всей группы кадров) с учетом информации о цвете объектов, например, неба, одежды, техники, древесины и тд и возможно по частям, пока не получится правдоподобно. Можно по формуле подобрать значения RGB для восстановленного оттенка серого и попытаться восстановить другие оттенки. Но разные цвета могут давать одинаковый оттенок серого. человек корректирует результат визуально, а компьютер?
     
  17. trsoft

    trsoft Member

    Публикаций:
    0
    Регистрация:
    18 июл 2018
    Сообщения:
    115
    (I=A*R+B*G+C*B) уравнение с 3-мя неизвестными. можно решить методом итераций. берем А=столько, находим B*G+C*B, берем В= столько, находим С. меняем цвет и смотрим результат на картинке.
     
  18. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Денис.
    Тема хорошая!
    Но чем больше я смотрю на картнки, тем труднее подавить позывы.
    Начинает сильно укачивать. Предлогаю размещать более гуманные
    изображения. По отношению к мозжечку человека.
     
  19. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Продолжаем разговор.

    [​IMG]

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

    Итак, запилил нейросеть на C++, алгоритм обучения - тоже (переходная функция - сигмоид, функция ошибки - наименьшие квадраты, алгоритм - градиентный спуск). Первый вывод: с обучением на CPU ловить вообще нечего, вычислений нереально дохера. Поэтому следующий шаг - переписать все на GPU. К сожалению, основная нейросетевая движуха на NVidia + CUDA, а у меня Radeon (Sapphire Tri-X R9 290 если вдруг важно). Поэтому буду пробовать начать с OpenCL.

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

    Пока что начнем с функции однократного вычисления нейронной сети (то есть мы ей входные данные, она нам - выходные). На CPU последовательность действий близка к тому, как бы мы описали это на пальцах: активация нейрона - dot product весов на входные сигналы, результат отправить в сигмоид, результат сигмоида - это входной сигнал для нейронов следующего слоя. То есть, умножаем, складываем, вычсляем функцию, и так для каждого нейрона. Но на GPU такой подход, как я понимаю, не годится. На GPU нужно перестроить алгоритмы таким образом, чтобы вместо последовательности маленьких групп разнотипных операций было несколько больших однотипных задач: сначала всё-всё перемножить, потом всё-всё сложить, потом всё-всё прогнать через сигмоид. Итого три операции на каждый слой (вместо N операций в случае CPU, где N - число нейронов в слое).

    Пока что все правильно? Двигаться в том же направлении? И еще: если у кого есть ссылочки на простые и понятные туторы по OpenCL - вбрасывайте. И еще - если кто-то юзал Boost.Compute - напишите, есть пара вопросов.
     
  20. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.548
    Адрес:
    Russia
    У Амд есть библиотека на подобие cuBlas: clFFT и clBlas (https://github.com/clMathLibraries/clBLAS)
    Тат есть все эти дот продукт и прочее
    Вам нужно просто заюзать функцию свертки.
    Число слоев выбираете сами.
    Но в целом у вас описание правильное. Все так и делают
    Ну и как пример
    https://cognitivedemons.wordpress.com/2017/09/02/a-neural-network-in-10-lines-of-cuda-c-code/
    На гпу куда. Но на OpenCL переписать не сложно. Если не справитесь- пишите помогу. Когда перепишите - уже поймете как оно и будете свое юзать.

    Еще для тестов возьмите нейросеть определяющую числа (только числа) она очень простая. Учится быстро.
    Вот датасет : http://yann.lecun.com/exdb/mnist/
    Вот сама сеть http://deeplearning.net/tutorial/lenet.html
    Так и называется LeNet. это сеть сверточного типа .

    Ну и еще вот вам статья на русском ) по нейросетям

    http://algotravelling.com/ru/машинное-обучение-это-весело-3/
     
    q2e74 нравится это.