1. 什么是神经网络
【百度百科】人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
首先看一个最简单的神经网络结构——节点。
在上图中, ‘ wij ’表示连接权重,‘ bi ’表示偏置,‘ ai ’表示节点的输入,其中‘ i ’表示某一个训练样本。所以这个节点的功能就是对输入的数据首先通过加权重和偏置,再经过激活函数(Activation Function) 处理,得到一个输出结果,输出结果极大可能与理想值偏离,如果偏离正确的结果太多,那么可以通过改变权重和偏置值来对结果进一步逼近,直到接近正确结果。
关于激活函数,可以参见这些文章的观点。如果我们把每次数据的加工(权重,偏置,激活函数)看作一次映射,那么利用激活函数确实能够提高输入到输出的适应能力。
下面介绍一种叫sigmoid的激活函数,函数表达式如下:
g ( z ) = 1 1 + e − z g(z)= \frac{1}{1+e^{-z}} g(z)=1+e−z1
而这里 z = w 1 × a 1 + w 2 × a 2 + . . . + b z= w_1\times a_1 + w_2\times a_2+...+b z=w1×a1+w2×a2+...+b。可以看到无论输入z的范围有多大,经过sigmoid的激活函数的映射,最终会落在(0,1)之间。这样会使得输出更加直观,比如一个输入对应的一个输出g(z)=0.9,那么可以认为这个输入有90%的概率是符合预期的。
2. 如何自我学习
2.1 损失函数
上面提到可以通过改变权重和偏置值来对精确值进一步逼近,直到接近正确结果。这是怎么进行的呢?首先要确定输出的结果与正确结果偏离多少,概率统计中学过方差的概念(方差是衡量随机变量或一组数据时离散程度的度量。),所以理论上我们也可以用方差来衡量这个偏离程度。
S 2 = ∑ ( x i − x ‾ ) 2 n − 1 S^2= \frac{\sum(x_i-\overline x)^2}{n-1} S2=n−1∑(xi−x)2
S 2 S^2 S2为样本方差, x i x_i xi为样本变量, x ‾ \overline x x为样本均值, n n n为样本数。至于上式的分母部分为什么是 n − 1 n-1 n−1参见这篇文章。
总之,当我们采用抽样的方式去估计总体时,例如抽样得到的样本是 { x 1 , x 2 , x 3 , . . . , x n } \{x_1,x_2,x_3,...,x_n\} { x1,x2,x3,...,xn},计算方差时, x ‾ \overline x x的存在会让 { x 1 , x 2 , x 3 , . . . , x n } \{x_1,x_2,x_3,...,x_n\} { x1,x2,