Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
что такое "5 почему" и причем здесь 4 слоя? Посмотрел, на этот вопрос ответит простое дерево решений. Универсальным аппроксиматором является НС из 2-х слоев, которая ответит на любое кол-во "почему" :) Остальные слои используются, в основном, для предобработки данных в сложных конструкциях. Например, сжать изображение из большого кол-ва пикселей, а затем распознать его.
"5 почему" - техника для определения причинно-следственной связи Википедия. В статье приведена для примера так, как по существу нейронная сеть призвана найти причинно-следственную связь между прошлыми ценовыми движениями и будущим направлением движение цены.
только входной сигнал тоже в данном интервале должен быть. Имею ввиду под входным сигналом - именно входной сигнал в нейрон, а не в обсуждаемую функцию.
Теоретически, входной сигнал в нейрон может быть любой. Его влияние корректируется весовым коэффициентов. Если входной сигнал слишком мал, но оказывает значительное значение на общее решение, то его весовой коэффициент будет увеличен в процессе обучения. Если же сигнал имеет большое значение, но его влияние на результат ничтожно, то его весовой коэффициент будет уменьшен вплоть до "0" (разрыв связи между нейронами).
"5 почему" - техника для определения причинно-следственной связи Википедия. В статье приведена для примера так, как по существу нейронная сеть призвана найти причинно-следственную связь между прошлыми ценовыми движениями и будущим направлением движение цены.
Просто не понял какая корреляция между кол-вом вопросов и слоев. На вход подается несколько признаков, на каждый из которых должны ответить (грубо говоря). На выходе суммарный результат. Может быть достаточно одного скрытого слоя, не обязательно 4. Считается, что НС с 2-мя скрытыми слоями может аппроксимировать любую ф-ю. Это так, для справки.
И в развитие темы вопрос про архитектуру НС. От чего она зависит?
Просто не понял какая корреляция между кол-вом вопросов и слоев. На вход подается несколько признаков, на каждый из которых должны ответить (грубо говоря). На выходе суммарный результат. Может быть достаточно одного скрытого слоя, не обязательно 4. Считается, что НС с 2-мя скрытыми слоями может аппроксимировать любую ф-ю. Это так, для справки.
Техника "5 почему" построена на последовательных вопросах, когда каждый вопрос отвечает на причину предыдущего. К примеру, мы смотрим на график и растущий график цены и и строим вопросы (вопросы ответы даны абстрактно для разъяснения техники):
1. Куда торговать? - Покупать
2. Почему покупать? - Потому-что растущий тренд
3. Почему растущий тренд? - МА50 растет
4. Почему МА50 растет? - средня цена закрытия 50 свечей со сдвигом 1 ниже средней цены закрытия 50 последних свечей.
и т.д.
Т.к. вопросы последовательны и имеют причинно-следственную связь, то создаем слои для соблюдения этой связи. Если мы используем только 2 слоя, то теряется причинно- следственная связь, нейросеть анализирует ряд независимых вариантов и выбирает лучший.
И в развитие темы вопрос про архитектуру НС. От чего она зависит?
От понимания процесса архитектором. В статье приведен простейший вариант нейронной сети и не рассматривались сверточные и другие архитектуры.
Техника "5 почему" построена на последовательных вопросах, когда каждый вопрос отвечает на причину предыдущего. К примеру, мы смотрим на график и растущий график цены и и строим вопросы (вопросы ответы даны абстрактно для разъяснения техники):
1. Куда торговать? - Покупать
2. Почему покупать? - Потому-что растущий тренд
3. Почему растущий тренд? - МА50 растет
4. Почему МА50 растет? - средня цена закрытия 50 свечей со сдвигом 1 ниже средней цены закрытия 50 последних свечей.
и т.д.
Т.к. вопросы последовательны и имеют причинно-следственную связь, то создаем слои для соблюдения этой связи. Если мы используем только 2 слоя, то теряется причинно- следственная связь, нейросеть анализирует ряд независимых вариантов и выбирает лучший.
нет разницы в какой последовательности задать эти вопросы, результат на выходе будет одинаковым. Здесь не нужно разделение по слоям.
Добрый вечер, Петр.
Нейрон внутри состоит из 2-х функций:
1. Сначала вычисляем сумму всех входящих сигналов с учетом их весовых коэффициентов. Т.е. берем значение на каждом входе нейрона и умножаем на соответствующий весовой коэффициент. И складываем значения полученных произведений.
Таким образом получаем некое значение, которое подается на вход функции активации.
2. Функция активации преобразовывает полученную сумму в нормализованный выходной сигнал. Здесь может быть как простая логическая функция, так и различные сигмовидные функции. Последние получили большее распространение, т.к. имеют более плавный переход изменения состояния.
Связь между нейронами организована в виде прямой передачи выходного значения одного нейрона на вход последующего нейрона. При этом обращаясь к п.1. поступающее на вход нейрона значение учитывается в соответствии с его весовым коэффициентом.
нет разницы в какой последовательности задать эти вопросы, результат на выходе будет одинаковым. Здесь не нужно разделение по слоям.
Благодарю. Статья и ссылки помогли мне понять суть предназначения нейросетей - определение и обработка инварианта заложенного в массиве данных, и простейший метод технической реализации, который мне еще предстоит понять окончательно. Но, обьяснения очень доходчивы.
Если охота разобраться в структуре MLP то ИМХО лучше посмотрите на этот код:
#danila_zaytcev mlp 2018
import random
import math
class mlp:
class activefunc:
def __init__(self, func, derive):
self.func = func
self.derive = derive
def __init__(self, structure, af, learnRate, moment, epohs):
self.leanRate = learnRate
self.af = af
self.moment = moment
self.epohs = epohs
self.layerCount = len(structure) - 1
self.weightCount = [None] * self.layerCount
self.neuronsCount = [None] * self.layerCount
self.Out = [None] * self.layerCount
self.Err = [None] * self.layerCount
self.Drv = [None] * self.layerCount
self.Inputs = [None] * self.layerCount
self.Weigthts = [None] * self.layerCount
for l in range(self.layerCount):
nLen = structure[l + 1]
wLen = structure[l] + 1
self.weightCount[l] = wLen
self.neuronsCount[l] = nLen
self.Out[l] = [0.0] * nLen
self.Err[l] = [0.0] * nLen
self.Drv[l] = [0.0] * nLen
self.Weigthts[l] = [None] * nLen
for n in range(nLen):
self.Weigthts[l][n] = [None] * wLen
for w in range(wLen):
self.Weigthts[l][n][w] = (random.random() * 2 - 1) / wLen
def forward(self, input):
for l in range(self.layerCount):
self.Inputs[l] = input
for n in range(self.neuronsCount[l]):
wcount = self.weightCount[l] - 1
out = 0.0
for w in range(wcount):
out += self.Weigthts[l][n][w] * input[w]
out += self.Weigthts[l][n][wcount]
out = self.af.func(out)
self.Out[l][n] = out
self.Drv[l][n] = self.af.derive(out)
input = self.Out[l];
def backward(self, output):
last = self.layerCount - 1
for n in range( self.neuronsCount[last]):
self.Err[last][n] *= self.moment
self.Err[last][n] += (output[n] - self.Out[last][n])*self.Drv[last][n] * (1.0 - self.moment)
for l in range(last - 1, -1,-1):
for n in range( self.neuronsCount[l]):
backProp = 0
for w in range(self.neuronsCount[l + 1]):
backProp += self.Weigthts[l + 1][w][n] * self.Err[l + 1][w]
self.Err[l][n] = backProp * self.Drv[l][n]
def update(self):
for l in range(self.layerCount):
for n in range(self.neuronsCount[l]):
G = self.Err[l][n] * self.leanRate
for w in range(self.weightCount[l] - 1):
self.Weigthts[l][n][w] += self.Inputs[l][w] * G
self.Weigthts[l][n][self.weightCount[l] - 1] += G
def learn(self, inputs, outputs):
for e in range(self.epohs):
for i in range(len(inputs)):
index = random.randint(0, len(inputs) - 1)
self.forward(inputs[index])
self.backward(outputs[index])
self.update()
def compute(self, vector):
self.forward(vector)
return self.Out[self.layerCount - 1]
def test_mlp():
inputs = [[1.0,1.0],[-1.0,-1.0],[1.0,-1.0],[-1.0,1.0]]
outputs = [[1.0],[1.0],[-1.0],[-1.0]]
af = mlp.activefunc(math.tanh, lambda y: 1.0 - y ** 2)
ml = mlp([2,2,1],af,0.01,0.1,10000)
ml.learn(inputs,outputs)
for i in inputs:
print(str(i) + " = " + str(ml.compute(i)))
Он в пятеро меньше, гарантировано делает то что нужно и на питоне, который намного проще воспринимать.
Но автор статьи молодец конечно, MLP самому написать это круто :)