Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ну вот гляди. Если сумма произведений нейронов предыдущего слоя и их весов выходит за диапазон [-1;1], то он обрезается до -1 или 1. Таким образом, нейрон нечувствителен вне диапазона.
Тоже самое относится и к классическим сигмоидам, они так же чувствительны только в определенном диапазоне. Какая разница, если експонентная сигмоида дает значение -1 при сигнале на него -100, то же самое будет и с моей формулой (см код)? так же будет -1 при аргументе -100.
Кем обрезается? фукцией активации но аргументом функции может быть любое число а не только от -1 до 1, вот я и предлагаю тебе посмотреть что выдаст функция активации если аргумент будет -20 или 20
ЗЫ Просто посмотри что выдают твои функции в большем диапазоне параметров.
Как видишь ничего твои формулы не обрезают SigmaAbs вылетает из диапазона легко, а SigmaNew правда держится в диапазоне но ведёт себя неадекватно и потом в SigmaNew не используется коэф, при его использовании её результат тоже вылетает из диапазона.
красная сигмоида (приведена к диапазону -1:1)
зелёная это вот эта формула :
синяя эта:
Вычисление степени числа очень ресурсоемкая задача.
Я уверен Вы в курсе такой штуки как CUDA https://ru.wikipedia.org/wiki/CUDA
И наверняка читали вот этот документ - http://www.computeroptics.smr.ru/KO/PDF/KO34-2/12.pdf
Почему Вам не подходит такой подход к реализации нейросети?
Как видишь ничего твои формулы не обрезают SigmaAbs вылетает из диапазона легко, а SigmaNew правда держится в диапазоне но ведёт себя неадекватно и потом в SigmaNew не используется коэф, при его использовании её результат тоже вылетает из диапазона.
красная сигмоида (приведена к диапазону -1:1)
зелёная это вот эта формула :
синяя эта:
Николай, ну ты чего? Я почему думаешь показывал код:
Как раз для того, что бы обрезать. Я же говорил, что функция активации нечувствительна вне диапазона. Я прекрасно знаю, как выглядит график вне [-1;1] аргументов.
Вот, попробуй запустить этот скрипт, единственное, допустил ошибку, и нужно было if(x>=-1.0 && x <=1) вместо if(x>-1.0 && x <1) :
Вот тестовый пример использования нейронной сети со старой функцией:
А вот с новой функцией:
Но это всё бессмысленные разговоры, ведь уже понятно, что так сеть не ускорить.
Если кому удастся ещё оптимизировать код сети, буду очень благодарен.
Я уверен Вы в курсе такой штуки как CUDA https://ru.wikipedia.org/wiki/CUDA
И наверняка читали вот этот документ - http://www.computeroptics.smr.ru/KO/PDF/KO34-2/12.pdf
Почему Вам не подходит такой подход к реализации нейросети?
Николай, ну ты чего? Я почему думаешь показывал код:
Как раз для того, что бы обрезать. Я же говорил, что функция активации нечувствительна вне диапазона. Я прекрасно знаю, как выглядит график вне [-1;1] аргументов.
Вот, попробуй запустить этот скрипт, единственное, допустил ошибку, и нужно было if(x>=-1.0 && x <=1) вместо if(x>-1.0 && x <1) :
Вот тестовый пример использования нейронной сети со старой функцией:
А вот с новой функцией:
Но это всё бессмысленные разговоры, ведь уже понятно, что так сеть не ускорить.
Если кому удастся ещё оптимизировать код сети, буду очень благодарен.
Сори за невнимательность. ты прав.
Но ты ведь делаешь обрезку, а в експоненте идёт не обрезка а стремнение к 1
Хотя если принять что сетке пофиг то разницы действительно нет, я лично считаю что не пофиг. Тк при сложении и умножении на следующем входе эта разница сказывается, хотя наверное для однослойно сетки точно разницы нет.
Спасибо, я читал эти документы. Тему CUDA изучаю.
Подкину Вам еще :) Только чур - расскажите, Ваше мнение раз Вы специализируетесь в нейросетях, это действительно, на мой взгляд тоже, интересное направление.
Вот готовые библиотеки - http://leenissen.dk/fann/html_latest/files2/gpu-txt.html
Вот еще один по моему уже правда заброшенный проект - http://www.codeproject.com/KB/graphics/GPUNN.aspx
Вот тут есть даже плагины для матлаб, http://www.nvidia.com/object/cuda_learn_stage.html
Как у Вас с английским?
Urain:
Сори за невнимательность. ты прав.
Ничего страшного. Вот теперь только дай мне повод, и я с тобой поквитаюсь. :D
Но ты ведь делаешь обрезку, а в експоненте идёт не обрезка а стремнение к 1
Да, обрезка. Но это не важно - поясню ниже.
У этой формулы есть плюс - у неё есть обратная формула, имеющая точное значение - правда сейчас что то сходу не припомню, за чем мне это было нужно. А вот обратная формула експонентной сигмоиде дает стремление в +бесконечность и в -бесконечность - что не дает возможности практического применения обратной её формуле.
Хотя если принять что сетке пофиг то разницы действительно нет, я лично считаю что не пофиг. Тк при сложении и умножении на следующем входе эта разница сказывается,
Во многих книжках по сеткам, тех, которые я мельком смотрел, говорится, что о качестве обучения можно судить косвенно о распределении её весов (лучше если равномерное распределение). Это правильно, но только отчасти. Скажем, если большинство весов сети лежит по краям распределения, то это может и не означать, что сеть тренирована неправильно, это может означать, что веса сети просто являются переключателями знака.
Но вот по моему опыту, и в книжках почему то об этом не пишут, о качестве обучения можно судить не по распределению весов, а по распределению сигнала, поступающего на нейрон (сумма произведений нейронов предыдущего слоя и их весов). И если распределение этого сигнала смещено к краям, это означает только одно - нейроны не работают, они не выполняют своего прямого назначения - нелинейное преобразование. Так же, очень плохо, если распределение сосредоточилось в центре чувствительности нейрона - это означает, что нейрон элементарно обнуляет сигнал, а если так работают большинство нейронов, то сеть элементарно обучена тупо усреднять данные. Но это уже всё офтоп и флуд за рамками топа, надеюсь, топикстартер меня простит. (топикстартер прощает, примечание автора) :D
Вот, от руки изобразил зоны чувствительности нейрона. Зеленым показаны зоны нормальной работы нейрона, красным - нечувствительные зоны.
Одно замечание. Вышесказанное относится только к сигмаобразным активационным функциям, и не распространяется на логические дискретные функции-переключатели.
хотя наверное для однослойно сетки точно разницы нет.
У меня не однослойная сеть.
Подкину Вам еще :) Только чур - расскажите, Ваше мнение раз Вы специализируетесь в нейросетях, это действительно, на мой взгляд тоже, интересное направление.
Вот готовые библиотеки - http://leenissen.dk/fann/html_latest/files2/gpu-txt.html
Вот еще один помоему уже правда заброшенный проект - http://www.codeproject.com/KB/graphics/GPUNN.aspx
Вот тут есть даже плагины для матлаб, http://www.nvidia.com/object/cuda_learn_stage.html
Спасибо. Но предпочитаю наступить на свои грабли, чем получить по лбу чужими граблями (я имею в виду языки неMQL5ы). Единственное, что, пожалуй, буду изучать серьезно из чужих кодов - это примеры нейросетей, написанных с использованием CUDA, примеры есть на девелоперской части сайта nVidia.
Как у Вас с английским?
Ничего страшного. Вот теперь только дай мне повод, и я с тобой поквитаюсь. :D
Да, обрезка. Но это не важно - поясню ниже.
У этой формулы есть плюс - у неё есть обратная формула, имеющая точное значение - правда сейчас что то сходу не припомню, за чем мне это было нужно. А вот обратная формула експонентной сигмоиде дает стремление в +бесконечность и в -бесконечность - что не дает возможности практического применения обратной её формуле.
Во многих книжках по сеткам, тех, которые я мельком смотрел, говорится, что о качестве обучения можно судить косвенно о распределении её весов (лучше если равномерное распределение). Это правильно, но только отчасти. Скажем, если большинство весов сети лежит по краям распределения, то это может и не означать, что сеть тренирована неправильно, это может означать, что веса сети просто являются переключателями знака.
Но вот по моему опыту, и в книжках почему то об этом не пишут, о качестве обучения можно судить не по распределению весов, а по распределению сигнала, поступающего на нейрон (сумма произведений нейронов предыдущего слоя и их весов). И если распределение этого сигнала смещено к краям, это означает только одно - нейроны не работают, они не выполняют своего прямого назначения - нелинейное преобразование. Так же, очень плохо, если распределение сосредоточилось в центре чувствительности нейрона - это означает, что нейрон элементарно обнуляет сигнал, а если так работают большинство нейронов, то сеть элементарно обучена тупо усреднять данные. Но это уже всё офтоп и флуд за рамками топа, надеюсь, топикстартер меня простит. (топикстартер прощает, примечание автора) :D
Вот, от руки изобразил зоны чувствительности нейрона. Зеленым показаны зоны нормальной работы нейрона, красным - нечувствительные зоны.
Одно замечание. Вышесказанное относится только к сигмаобразным активационным функциям, и не распространяется на логические дискретные функции-переключатели.
У меня не однослойная сеть.
Обратная функция к сигмоиду гипербола но совмещёная в месте разрыва те точка разрыва гиперболы есть седловой точкой сигмоиды 0,5.
Если рассмотреть геперболу то видно что перелом шага (те нелинейность) происходит в точке сечения гиперболы линией 45 градусов. y=x
Для сигмоиды это будет обратная ей 45 град линия те y=1/x. и эта линия сечёт сигмоид в районе 0.7853981633974483
это соответствует аргументу сигмоиды ~1.3
те для нелинейных преобразований очень важно чтоб распределение аргументов было вокруг ~1.3 для этого собственно и нужен коэфф при аргументе чтоб подправить сдвиг в нужную область.
PS
//2011.02.04 18:09:24 Листок5 (EURUSD,H1) M_PI_4= 0.7853981633974483
//2011.02.04 18:09:24 Листок5 (EURUSD,H1) sigma(1.297406418800268)=0.7853981639887803