这个例子是最基础的例子,深度学习是它的各种形式的扩展。几个关键点:神经网络结构,激活函数,向量化,随机梯度下降算法,是深度学习的基石。
 
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