Jump to content
    

Модуль на VHDL кусочно-линейной (семь участков) апроксимации функции активации y = tanh(x), не имеющий умножений.

Приветствую, народ!

Когда-то искал в сети готовое решение функции активации для проб NN...  А тут вынужденная пауза в деятельности.  Хочу поделиться простым решением для фантазеров.

Может кому пригодится? Прилагаю бенч, чтобы вопросов меньше было...

SIGMOIDA.ZIP

Share this post


Link to post
Share on other sites

Приветствую!  Как-то не солидно получилось...  :to_become_senile:

Ценность предыдущего варианта может быть интересна чисто как студенческая при освоении языка и симуляции. Разве что принять к сведению.  Там сжатие только в два раза...  А для NN это супер-важно!

По этому примеру сделал новый вариант (с той же латентностью и одиннадцатью кусочно-линейных фрагментов) со сжатием в 16 раз ( 12 разрядов на входе и 8 на выходе).  С вопросами в личку... Извините, запаролил по нужде.       :cray:

image.thumb.png.a7529163e545735d079acfb6b130a873.png

 

SIGMOIDyn.zip

Share this post


Link to post
Share on other sites

..Наконец-то мной подано заявление на пенсию и получение ИНН, а также полис мед обслуживание!

В честь этого даю код пароля     2030601038.   Вперед фантазеры   NN   !!!!!

Отмечу, что благотворительности не дождался НИКАКОЙ...  Спасибо за науку!

По-русски надо жить!  Впроголодь...

Share this post


Link to post
Share on other sites

Вижу  пассивный интерес к теме.  Только один человек скачал исходник...

Принял к сведению...   Смотрю уже из интереса к теме

Share this post


Link to post
Share on other sites

30 minutes ago, Мур said:

Вижу  пассивный интерес к теме.  Только один человек скачал исходник...

Принял к сведению...   Смотрю уже из интереса к теме

Сочувствую.Неудачная релокация.

Share this post


Link to post
Share on other sites

предлагаю написать статью, в которой расписать принцип работы вашего блока, оценить точность и выложить тут 

https://fpga-systems.ru/publ/

 

там уже выгладывали подобные статьи, например

https://fpga-systems.ru/publ/raznoe/poznavatelnoe/vychislenie_dvoichnogo_logarifma_iteracionnym_metodom_na_plis/16-1-0-138

https://fpga-systems.ru/publ/raznoe/poznavatelnoe/potochnoe_vychislenie_dvoichnogo_logarifma/16-1-0-144

https://fpga-systems.ru/publ/xilinx/ide/primenenie_system_generator_dlja_modelirovanija_hdl_blokov_na_primere_sistemy_avtomaticheskoj_regulirovki_usilenija/35-1-0-133

 

Share this post


Link to post
Share on other sites

1 hour ago, quato_a said:

предлагаю написать статью, в которой расписать принцип работы вашего блока, оценить точность и выложить тут 

....Тут скорее важна сама идея!  Настолько она проста...

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

Итак,- тут важны 3 момента,-   1) сохранить наклон кривой y = 4*x в младших разрядах по оси Х (старшие будут участвовать с сатурации)  в районе максимальной крутизны, а все остальные фрагменты уже под сжатие должны браться с наклоном из ряда степени двойки. Благодаря этому я ухожу от умножений;

         2) основная трата ресурса ПЛИС на компарирование для построения диапазонов разбиения (под выбор наклона аппроксимирующего линейного фрагмента);

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

Я сверял со  значениями формулы сами отсчеты в симуляции. Погрешность допускал +\- 5 тиков в выходном диапазоне +\-  127 (кроме краёв, где уже наступило насыщение и отсчеты особо не интересны) . Самое ответственное место  нулевая область, которую я называю "зрачок нейрона".

И последнее, не маловажное... Можно построить процесс моделирования самой сети и обучения из расчета именно такой (не идеальной) функции активации, чтобы уйти от академизма в подходе ради экономии ресурса.  Ведь таких мест в дизайне по числу нейронов!    ...Тем более в самой природе характер нелинейности вряд-ли идеален.   Это должно работать!

image.thumb.png.8467ea73d9b10b40131bd1b426063451.png

А сэкономленные умножители как раз пригодятся во взвешивании по коэффициентам!

Share this post


Link to post
Share on other sites

22 hours ago, Vasil_Riabko said:

Сочувствую.Неудачная релокация.

Чужбина надоела!  А здание, где жил, разрушено попаданием украинской 82мм мины в соседний подъезд...

Попытку релокации в Ростов делал еще в 2014г(еще не был пенсионером), но из-за гражданства меня не взяли, хоть я точно нужен был в 3х местах...

Мой родной Севастополь имел 2 крупных завода "Парус" и "Муссон", но там теперь не нужны специалисты моего плана.  Украина все уничтожила.

Ищу теперь что ближе, но пока безуспешно.  Симферополь, Краснодар, Ростов на Дону, Воронеж, Таганрог...  Жильё там дороже чем тут...

Главное понял - возраст не дает, а минимальная пенсия тут(выше моей в Харькове почти в 3 раза!)  вынуждает идти охранником или в цех...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...