斯坦福大学深度学习笔记:神经网络
来源:互联网 发布:小米手机数据迁移华为 编辑:程序博客网 时间:2024/05/17 11:57
一、神经网络背景
神经网络的灵感来源与人的大脑。实验证明大脑利用同一个学习算法实现了听觉、视觉等等所有的功能,这也是神经网络算法美好的愿景。
神经网络算法在八十到九十年代被广泛使用过, 20世纪90年代,各种各样的浅层机器学习模型相继被提出,例如支撑向量机(SVM,Support Vector Machines)、 Boosting、最大熵方法(如LR,Logistic Regression)等。但之后便使用的变少了。但最近又开始流行起来了,原因是神经网络非常依赖计算能力的算法,随着新计算机性能的提高,算法又成为了有效的技术。
二、神经网络模型表达
神经网络模型与人类神经元特别相似。
逻辑回归的激活函数
第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏倚单位(bias unit):X0,
下面引入一些标记法来帮助描述模型:
代表第j层的第i个激活单元。
代表第j层的第i个激活单元。
代表从第j层映射到第j+1层时的权重的矩阵,例如代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第j层的激活单元数量为行数,以第j+1层的激活单元数为列数的矩阵。例如:上图所示的神经网络中的尺寸为4*3。
三、正向传播
对于上面的神经网络我们可以计算第二层的值为:
计算后加上
根据第二层的值计算出第三层的值。
正向传播就是如此,从输入参数到最终结果
四、多类分类
如果输出结果超过两个我们使用多个输出节点,比如我们训练一个算法用来识别路人、汽车、摩托车和卡车,在输出层我们应该有4个值。例如,第一个值为1或0用于预测是否是行人,第二个值用于判断是否为汽车。
下面是该神经网络的可能结构示例:
下面是该神经网络的可能结构示例:
神经网络算法的结果可能为这四种之一:
五、神经网络的代价函数(cost function)
我们还记得逻辑回归中的代价函数
其实只要理解Cost function反映的就是预测值与实际值的误差,那么完全可以根据问题自定义一个Cost function表达式。在Coursera Machine Learning课程中将神经网络看作是输出层采用逻辑回归的分类器,因此其代价函数如下:
其中 :
L代表一个神经网络中的层数
Sl代表第l层的处理单元(包括偏见单元)的个数。
SL代表最后一层中处理单元的个数。
K代表我们希望分类的类的个数,与SL相等。
六、反向传播(BACKPROPAGATION )
反向传播算法就是首先计算最后一层的误差,然后再一层一层反向求出各层误差,直到倒数第二层。
因为第一层是输入变量不存在误差。
因为第一层是输入变量不存在误差。
首先,我们引入 符号 δ ,解释如下:
代表了第 l 层的第 j 个节点的误差。
那么,各层各节点的error计算如下:
其中,
我们有了所有的误差表达式后,便可以计算代价函数的导数了。假设λ=0,即我们不做任何归一化处理时有:
重要的是清楚地知道上面式子中上下标的含义:
l代表目前所计算的是第几层。
j代表目前计算层中的激活单元的下标,也将是下一层的第j个输入变量的下标。
i代表下一层中误差单元的下标,是受到权重矩阵中第i行影响的下一层中的误差单元的下标。
l代表目前所计算的是第几层。
j代表目前计算层中的激活单元的下标,也将是下一层的第j个输入变量的下标。
i代表下一层中误差单元的下标,是受到权重矩阵中第i行影响的下一层中的误差单元的下标。
在求出了之后,我们便可以计算代价函数的偏导数了,计算方法如下:
七、 梯度检查(Gradient Checking)
当我们对一个较复杂的模型使用 梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。为了避免这样的问题,我们采取一种叫做梯度的数值检验(Numerical Gradient Checking)方法。
Octave中代码如下:
gradApprox = (J(theta + eps) – J(theta - eps)) / (2*eps)
gradApprox = (J(theta + eps) – J(theta - eps)) / (2*eps)
多参数使用公式:
八、随机初始化(Random Initialization)
我们不能式用全0或者全部相同数字来初始化参数。如果使用全0则会计算出相同的a1,a2。那就意味着所有映射关系都是相同的,即所有的隐藏单元都在计算相同的激励值,那么多单元神经网络就是多余的,最终该网络只会得到一个特征。这被称为对称权重(Symmetric ways)。
我们使用随机初始化解决这种问题:
ɛ 的取值:
Θ 的初始化:
0 0
- 斯坦福大学深度学习笔记:神经网络
- 斯坦福大学深度学习公开课cs231n学习笔记(5)神经网络结构与激活函数
- 斯坦福大学深度学习公开课cs231n学习笔记(10)卷积神经网络
- 斯坦福大学深度学习公开课cs231n学习笔记(8)神经网络学习过程中的检查事项和参数调优
- 斯坦福大学深度学习笔记:逻辑回归
- 斯坦福大学深度学习公开课cs231n学习笔记(7)神经网络防止数据过拟合:损失函数和正则化
- 斯坦福大学深度学习公开课cs231n学习笔记(9)softmax分类和神经网络分类代码实现
- 深度学习笔记1:神经网络 卷积神经网络
- 【神经网络和深度学习】笔记
- 【神经网络和深度学习】笔记
- 斯坦福大学深度学习开言
- [DeeplearningAI笔记]神经网络与深度学习4.深度神经网络
- 斯坦福大学深度学习与自然语言处理第四讲:词窗口分类和神经网络
- 深度学习 卷积神经网络学习笔记1
- 【神经网络和深度学习】学习笔记
- 《神经网络与深度学习》学习笔记
- 神经网络与深度学习学习笔记:实现单隐层的神经网络
- 神经网络与深度学习学习笔记:神经网络的优化
- spinner 详解
- js调试学习总结
- (笔记)Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境)
- ubuntu如何配置软件更新源和更新镜像
- error:Cannot assign to 'self' outside of a method in the init family
- 斯坦福大学深度学习笔记:神经网络
- 常用命令总结
- 错误笔记
- 数据结构与算法JavaScript - 栈
- POJ1503
- Debug慎用哦
- Redis简介及其使用方法
- 简单工厂,抽象工厂及抽象工厂
- SpannableString使用详解