斯坦福大学深度学习笔记:神经网络
2016-07-25 17:57
981 查看
一、神经网络背景
神经网络的灵感来源与人的大脑。实验证明大脑利用同一个学习算法实现了听觉、视觉等等所有的功能,这也是神经网络算法美好的愿景。神经网络算法在八十到九十年代被广泛使用过, 20世纪90年代,各种各样的浅层机器学习模型相继被提出,例如支撑向量机(SVM,Support Vector Machines)、 Boosting、最大熵方法(如LR,Logistic Regression)等。但之后便使用的变少了。但最近又开始流行起来了,原因是神经网络非常依赖计算能力的算法,随着新计算机性能的提高,算法又成为了有效的技术。
二、神经网络模型表达
神经网络模型与人类神经元特别相似。逻辑回归的激活函数
第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏倚单位(bias unit):X0,
下面引入一些标记法来帮助描述模型:
代表第j层的第i个激活单元。
代表从第j层映射到第j+1层时的权重的矩阵,例如代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第j层的激活单元数量为行数,以第j+1层的激活单元数为列数的矩阵。例如:上图所示的神经网络中的尺寸为4*3。
三、正向传播
对于上面的神经网络我们可以计算第二层的值为:计算后加上
根据第二层的值计算出第三层的值。
正向传播就是如此,从输入参数到最终结果
四、多类分类
如果输出结果超过两个我们使用多个输出节点,比如我们训练一个算法用来识别路人、汽车、摩托车和卡车,在输出层我们应该有4个值。例如,第一个值为1或0用于预测是否是行人,第二个值用于判断是否为汽车。下面是该神经网络的可能结构示例:
神经网络算法的结果可能为这四种之一:
五、神经网络的代价函数(cost function)
我们还记得逻辑回归中的代价函数其实只要理解Cost function反映的就是预测值与实际值的误差,那么完全可以根据问题自定义一个Cost function表达式。在Coursera Machine Learning课程中将神经网络看作是输出层采用逻辑回归的分类器,因此其代价函数如下:
与逻辑回归对比只是逻辑回归的结果是一个,而是K个逻辑回归单元。
其中 :
L代表一个神经网络中的层数
Sl代表第l层的处理单元(包括偏见单元)的个数。
SL代表最后一层中处理单元的个数。
K代表我们希望分类的类的个数,与SL相等。
六、反向传播(BACKPROPAGATION )
反向传播算法就是首先计算最后一层的误差,然后再一层一层反向求出各层误差,直到倒数第二层。
因为第一层是输入变量不存在误差。
首先,我们引入 符号 δ ,解释如下:
代表了第 l 层的第 j 个节点的误差。
那么,各层各节点的error计算如下:
其中,
我们有了所有的误差表达式后,便可以计算代价函数的导数了。假设λ=0,即我们不做任何归一化处理时有:
重要的是清楚地知道上面式子中上下标的含义:
l代表目前所计算的是第几层。
j代表目前计算层中的激活单元的下标,也将是下一层的第j个输入变量的下标。
i代表下一层中误差单元的下标,是受到权重矩阵中第i行影响的下一层中的误差单元的下标。
在求出了之后,我们便可以计算代价函数的偏导数了,计算方法如下:
七、 梯度检查(Gradient Checking)
当我们对一个较复杂的模型使用 梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。为了避免这样的问题,我们采取一种叫做梯度的数值检验(Numerical Gradient Checking)方法。Octave中代码如下:
gradApprox = (J(theta + eps) – J(theta - eps)) / (2*eps)
多参数使用公式:
八、随机初始化(Random Initialization)
我们不能式用全0或者全部相同数字来初始化参数。如果使用全0则会计算出相同的a1,a2。那就意味着所有映射关系都是相同的,即所有的隐藏单元都在计算相同的激励值,那么多单元神经网络就是多余的,最终该网络只会得到一个特征。这被称为对称权重(Symmetricways)。
我们使用随机初始化解决这种问题:
ɛ
的取值:
Θ 的初始化:
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法