1 深度学习与深层神经网络
维基百科对深度学习的精确定义为“一类通过多层非线性变换对高复杂性数据建模算法的合集”。可见深度学习的两个重要特性:多层和非线性。
1 非线性模型的局限性
一个线性模型中通过输入得到输出的函数被称为一个线性变换,线性模型的最大特点是任意线性模型的组合仍是线性模型。而前向传播算法完全符合其定义。因此只通过线性变换,任意层的全连接神经网络和单层神经网络的表达能力没有任何区别,且都是线性模型,而线性模型能解决的问题太有限,只能解决线性可分问题。
2 激活函数实现去线性化
如果将每个神经元(节点)的输出通过一个非线性函数,那么整个网络的模型就不再是线性的了。这个非线性函数就是激活函数。
TF目前提供7种非线性激活函数,包括tf.nn.relu、tf.sigmoid、tf.tanh是其中比较常用的几个。同时支持使用自己定义的激活函数。
3 多层网络解决异或运算
加入隐藏层后,异或问题可以得到很好的解决。这个特征对于不易提取特征向量的问题有很大帮助。
2 损失函数定义
神经网络模型的效果和优化目标是通过损失函数(loss function)来定义的。
1 经典损失函数
交叉熵是判断一个输出向量和期望向量距离的评判方法之一。交叉熵刻画的是两个概率分布之间的距离。
1.分类问题->输出n个结点->交叉熵,原来的神经网络输出被当做置信度生成新的输出,其满足概率分布的所有要求,用交叉熵计算预测的概率分布和真实答案的概率分布之间的距离
2.回归问题(预测)->1个结点->均方误差
此外,还可以根据问题来自定义损失函数,总之损失函数是希望答案朝着正确的方向发展,所以如果偏离某一方向,可以给其更大的惩罚,这样会使得得到的值离期望的答案更近。不同的损失函数对于相同的神经网络产生重要影响。
3 神经网络优化算法
梯度下降算法主要用于优化单个参数的取值,而反向传播算法给出了一个高效的方式在所有参数上使用梯度下降算法。这里只介绍基本概念和主要思想略去数学推导和证明。
要寻找使J(A)最小的A,目前没有通用方法对任意损失函数直接求解最佳的参数取值,梯度下降算法迭代更新参数A,不断沿着梯度的反方向让参数朝着总损失更小的方向更新。
参数更新的公式为:
An+1=An−η∂J(An)∂An
其中, η