人工神经网络由一系列神经元组成:
每个神经元都代表了一个特定的线性函数:
每个单元都会进行以下的计算过程:
ini = ΣWj,iaj
ai = g(ini)
通过调整每一个神经元的权值W,可以使得整个神经网络非常好的拟合数据。
激活函数
每个神经元中都有一个激活函数,通常使用Sigmoid函数:
f(x) = 1/(1+e -x) dy/dx = y(1-y)
因为它在定义域内光滑且连续,输出十分平缓。
训练过程
function ANN(examples) returns a neural network
network = a network with random weights
repeat do
for each example in examples do
FeedForward(network, example)
BackPropagation(network, example)
error = CalError(network, examples)
until error is small enough
return network
可以看到训练过程包括两个主要步骤:
- 前向传播(Feed Forward):将样例输入神经网络中获得每个神经元的输出;
- 后向反馈(Back Propagation):根据每个神经元的输出调整权值。
前向传播
在前向传播过程中,我们将输入经过两层神经元后获得每一个神经元的输出,每一层都执行以下计算:
ini = ΣWj,iaj
ai = g(ini)
function FeedForward(network, example) return a output vector
for L = 2 to layer_num do
for each node i in layer L do:
sum = weight_L_i × a_L-1 // dot product
a_L_i = g(sum)
后向反馈
在后向反馈中,我们根据输出结果与正确结果相比较后,对各个神经元的权值进行修正。
function BackPropagation(network, example)
for each node j in the output layer do
b_j = g'(a_j)*(rightanswer_j-a_j)
for L = layer_num-1 to 1 do
for each node i in layer L do
b_i = g'(a_i)*(w × b_j)
for each weight w_i,j in network do
w_i,j = w_i, j + alpha*ai*b_j // alpha 为学习率