深度学习(Deep Learning)
定义:一类通过多层非线性变换对高复杂性数据建模算法的合集。因为深度神经网络是实现“多层非线性变换”最常用的一种方法,基本可以认为深度学习就是深度神经网络的代名词
深度学习最重要的两个特性:多层和非线性
线性与非线性
线性的局限:只通过线性变化,任意层的全连接神经网络和单层神经网络模型的表达能力没有任何区别。线性模型能解决的问题是有限的。
激活函数
激活函数实现去线性化
常用的非线性激活函数:
- ReLU函数:f(x)=max(x,0)
- sigmoid函数:f(x)=1/(1+e^(-x))
- tanh函数:f(x)=(1-e(-2x))/(1+e(-2x))
多层网络解决异或运算
损失函数
神经网络模型的效果以及优化的目标是通过损失函数(loss function)来定义的
交叉熵
给定两个概率分布p和q,通过q来表示p的交叉熵为:H(p,q)=-∑p(x)log q(x)
p代表的是正确答案,q代表的是预测值
交叉熵刻画了两个概率分布之间的距离,交叉熵值越小,两个概率分布越接近
TensorFlow实现交叉熵
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(y,y_)
y代表了原始神经网络的输出结果,y_给出了标准答案
Softmax
Softmax将神经网络的输出变成一个概率分布
神经网络的优化算法
通过反向传播算法(backpropagation)和梯度下降算法(gradient decent)调整神经网络中参数的取值。
反向传播算法
反向传播算法(是训练神经网络的核心算法)给出了一个高效的方式在所有参数上使用梯度下降算法,从而使神经网络模型在训练数据上的损失函数尽可能小
梯度下降算法
梯度下降算法主要用于优化单个参数的取值。
随机梯度下降算法(stochastic gradient descent):在每一轮迭代中,随机优化某一条训练数据上的损失函数。这样每一轮参数更新的速度就大大加快
为了综合梯度下降算法和随机梯度下降算法的优缺点,实际应用中一般采用这两个算法的折中–每次计算一小部分训练数据的损失函数。这一小部分数据被称之为batch。
过拟合问题
过拟合指的是当一个模型过为复杂之后,它可以很好地“记忆”每一个训练数据中随机噪音的部分而忘记了要去“学习”训练数据中通用的趋势
正则化(regularization)
为了避免过拟合问题,一个非常常用的方法是正则化。
正则化的思想就是在损失函数中加入刻画模型复杂程度的指标。
滑动平均模型
使模型在测试数据上更健壮