斯坦福大学深度学习笔记:神经网络

一、神经网络背景

神经网络的灵感来源与人的大脑。实验证明大脑利用同一个学习算法实现了听觉、视觉等等所有的功能,这也是神经网络算法美好的愿景。
神经网络算法在八十到九十年代被广泛使用过, 20世纪90年代,各种各样的浅层机器学习模型相继被提出,例如支撑向量机(SVM,Support Vector Machines)、 Boosting、最大熵方法(如LR,Logistic Regression)等。但之后便使用的变少了。但最近又开始流行起来了,原因是神经网络非常依赖计算能力的算法,随着新计算机性能的提高,算法又成为了有效的技术。

   二、神经网络模型表达

神经网络模型与人类神经元特别相似。
                   斯坦福大学深度学习笔记:神经网络_第1张图片
逻辑回归的激活函数
斯坦福大学深度学习笔记:神经网络_第2张图片

   
第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏倚单位(bias unit):X0,


下面引入一些标记法来帮助描述模型:
    代表第j层的第i个激活单元。
    代表从第j层映射到第j+1层时的权重的矩阵,例如代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第j层的激活单元数量为行数,以第j+1层的激活单元数为列数的矩阵。例如:上图所示的神经网络中的尺寸为4*3。

    三、正向传播

对于上面的神经网络我们可以计算第二层的值为:


               
  计算后加上

  根据第二层的值计算出第三层的值。
 正向传播就是如此,从输入参数到最终结果

           斯坦福大学深度学习笔记:神经网络_第3张图片

   四、多类分类

如果输出结果超过两个我们使用多个输出节点,比如我们训练一个算法用来识别路人、汽车、摩托车和卡车,在输出层我们应该有4个值。例如,第一个值为1或0用于预测是否是行人,第二个值用于判断是否为汽车。
下面是该神经网络的可能结构示例:   
       斯坦福大学深度学习笔记:神经网络_第4张图片
神经网络算法的结果可能为这四种之一:
                                 斯坦福大学深度学习笔记:神经网络_第5张图片

   五、神经网络的代价函数(cost function)


我们还记得逻辑回归中的代价函数
      
          

其实只要理解Cost function反映的就是预测值与实际值的误差,那么完全可以根据问题自定义一个Cost function表达式。在Coursera Machine Learning课程中将神经网络看作是输出层采用逻辑回归的分类器,因此其代价函数如下:

斯坦福大学深度学习笔记:神经网络_第6张图片
与逻辑回归对比只是逻辑回归的结果是一个,而是K个逻辑回归单元。
       其中 :
L代表一个神经网络中的层数
Sl 代表第l层的处理单元(包括偏见单元)的个数。
SL代表最后一层中处理单元的个数。
K代表我们希望分类的类的个数,与SL相等。

   六、反向传播(BACKPROPAGATION )

斯坦福大学深度学习笔记:神经网络_第7张图片
反向传播算法就是首先计算最后一层的误差,然后再一层一层反向求出各层误差,直到倒数第二层。
    因为第一层是输入变量不存在误差。

首先,我们引入 符号 δ ,解释如下:

代表了第 l 层的第 j 个节点的误差。

那么,各层各节点的error计算如下:

斯坦福大学深度学习笔记:神经网络_第8张图片

其中,


我们有了所有的误差表达式后,便可以计算代价函数的导数了。假设λ=0,即我们不做任何归一化处理时有:
      
重要的是清楚地知道上面式子中上下标的含义:
 l代表目前所计算的是第几层。
  j代表目前计算层中的激活单元的下标,也将是下一层的第j个输入变量的下标。
  i代表下一层中误差单元的下标,是受到权重矩阵中第i行影响的下一层中的误差单元的下标。 斯坦福大学深度学习笔记:神经网络_第9张图片
 在求出了之后,我们便可以计算代价函数的偏导数了,计算方法如下:

           斯坦福大学深度学习笔记:神经网络_第10张图片

   七、 梯度检查(Gradient Checking)

当我们对一个较复杂的模型使用 梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。为了避免这样的问题,我们采取一种叫做梯度的数值检验(Numerical Gradient Checking)方法。

             斯坦福大学深度学习笔记:神经网络_第11张图片

Octave中代码如下:
gradApprox = (J(theta + eps) – J(theta - eps)) / (2*eps)

多参数使用公式:


  八、随机初始化(Random Initialization)

我们不能式用全0或者全部相同数字来初始化参数。如果使用全0则会计算出相同的a1,a2。 那就意味着所有映射关系都是相同的,即所有的隐藏单元都在计算相同的激励值,那么多单元神经网络就是多余的,最终该网络只会得到一个特征。这被称为对称权重(Symmetric ways)。
我们使用随机初始化解决这种问题:
ɛ 的取值:
     

Θ 的初始化:



你可能感兴趣的:(深度学习,神经网络,数据分析,机器学习,Python)