这节课主要是理论,比较高深。老师讲完没太明白,对照书看才了解一二:
4.1 深度学习与深层网络神经
深度学习是一种高复杂性数据建模算法,它有两个非常重要的特性:多层和非线性。线性模型可以解决线性可分问题,而深度学习的目的是为了解决现实中更为复杂,无法线性分割的问题。
4.1.2 激活函数实现去线性化
解释:如果将每一个神经元的输出通过一个非线性函数,那么整个神经网络的模型也就不再是线性的了,这个非线性函数就是激活函数。目前TensorFlow提供7种激活函数,如tf.nn.relu,tf.sigmoid和tf.tanh等。
同时加入偏置值。
4.1.3 加入隐藏层解决异化运算
4.2 损失函数定义
4.2.1 经典损失函数
分类问题和回归问题是监督学习的两大种类。先说分类问题:
通过神经网络解决多分类问题最常用的方法是设置n个输出节点,其中n为类别的个数。
交叉熵函数(cross entropy)刻画了两个概率分布之间的距离,它是分类问题中使用比较广的一种损失函数。交叉熵值越小,两个概率分布越接近。
而Softmax回归可以将神经网络前向传播的结果变成概率分布。所以TensorFlow对这交叉熵和Softmax进行了统一封装,成为tf.nn.softmax_cross_entropy_with_logits函数。
如果输出神经元是线性的,那么二次代价函数就是一种合适的选择。如果输出神经元是S函数,那么比较适合交叉熵代价函数。
回归问题解决的是对具体数值的预测,比如房价预测等。 这些问题需要预测的是一个任意实数,最常用的损失函数是均方误差(MSE, mean squared error),公式为:
mse = tf.reduce_mean(tf.square(prediction-y))
4.3 神经网络优化算法
神经网络的优化过程可以分为两个阶段:
第一个阶段先通过前向传播算法得到预测值,并与真实值对比,得出两者之间的差距
第二个阶段通过反向传播算法计算损失函数对每一个参数的梯度,在根据梯度和学习率使用梯度下降算法更新每一个参数。
梯度下降法有三种:
标准梯度下降法
先计算所有样本汇总误差,然后根据总误差来更新权值。学习率是用来定义每次参数更新移动的幅度。随机梯度下降法
随机抽取一个样本来计算误差,然后更新权值批量梯度下降法
折中方案,从总样本中选取一个批次,然后计算这个batch的误差,根据误差更新权值
误差越大时,梯度就越大,参数w和b调整就越快,训练速度就越快。
只有当损失函数为凸函数时,梯度下降算法才能保证达到全局最优解。
4.4 神经网络进一步优化
包括学习率的设置,正则化避免过拟合,以及滑动平均模型。
小结一下,要在MNIST提高识别率,有:a. 学习率,b.加入隐藏层,c. 优化器,d. 迭代次数等方法。
最后按照老师的示例,加了2层隐藏层,将Mnist识别度提高到98%左右。
github代码