这个例子是最基础的例子,深度学习是它的各种形式的扩展。几个关键点:神经网络结构,激活函数,向量化,随机梯度下降算法,是深度学习的基石。
1.训练集
设训练集合是
{x(i),y(i)}i=1...n
,其中
x∈R1×d
。
x
是个向量,数据集有
n
个样本。
2.神经网络结构
一个神经元,有d+1个输入,前d个是向量
x
的输入,最后一个是b的输入。神经元的激活函数是sigmoid函数,也就是:
f(x)=11+exp(?x)=11+e?x
求导的话,就是
f′(x)=f(x)(1?f(x))
,可以推导出来的。
3.神经网络的输出
对一个样本而言,计算神经元的输出。
x
和b作为输入,传递到神经元的应激函数之前的值是
xW+b
,其中
W∈Rd×1
表示神经连接的权重。这个值再经过神经元的应激函数形成输出,因此,神经元的输出是
fW,b(x)=f(xW+b)=f(∑j=1dxjWj+b)
4.代价函数
.上一步,是一个样本时神经网络的输出。训练后的神经网络,期望在全部样本集上,让样本的拟合误差最小,设代价函数是MSE,那么在全部样本上,拟合误差代价函数如下:
J(W,b)=12∑i=1n(f(xiW+b)?yi)2
注意,这里的
xi
是粗体,表示一个向量,也就是一个样本,跟上面的
xj
不一样。
5.随机梯度下降求极值
上式求最小值。未知数是
W
和
b
。按照梯度下降算法,可知
wji+1=wji?η?J(W,b)?wj(wji)
这里,
i
表示第
i
次迭代,
wj
表示
W
的第
j
个元素。这就是梯度下降法求解
W
。
为简化起见,设
z=xiW+b
?J(W,b)?wj=∑i=1n(?f?z?z?wj(fw,b(z)?yi))=∑i=1nfw,b(z)(1?fw,b(z))xji(fw,b(z)?yi)
随机梯度下降的话,就每次随机选择若干个
wj
进行计算。
对于b,有下式:
?J(W,b)?b=∑i=1n(?f?z?z?wj(fw,b(z)?yi))=∑i=1nfw,b(z)(1?fw,b(z))(fw,b(z)?yi)
6.正则化
有时候,为了防止过拟合,在第4步的公式,会加上一个对
W
的正则:
J(W,b)=12∑i=1n((f(xiW+b)?yi)2+12μWTW
由此导致梯度下降算法会略做改变。
7.代码实现
本质上,单节点神经网络就是Logistic Regression。本博之前已经给出详细的推导过程,请参考
http://www.voidcn.com/article/p-uclydqrl-bat.html