学习目标
- 目标
- 知道softmax回归的原理
- 应用softmax_cross_entropy_with_logits实现softamx以及交叉熵损失计算
- 应用matmul实现多隐层神经网络的计算
- 应用
- 应用TensorFlow完成Mnist手写数字势识别
到目前为止,我们所接触的都是二分类问题,神经网络输出层只有一个神经元,表示预测输出\hat{y}y^是正类的概率{P}(y=1|x), \hat{y} > {0.5}P(y=1∣x),y^>0.5则判断为正类,反之判断为负类。那么对于多分类问题怎么办?
2.1.1 Softmax 回归
对于多分类问题,用 N表示种类个数,那么神经网络的输出层的神经元个数必须为L[output]=N, 每个神经元的输出依次对应属于N个类别当中某个具体类别的概率,即 P(y=N_1|x),..,P(y=N_n|x)P(y=N1∣x),..,P(y=Nn∣x)。
输出层即:
Z^{[L]} = W^{[L]}a^{[L-1]} + b^{[L]}Z[L]=W[L]a[L−1]+b[L],Z的输出值个数为类别个数
需要对所有的输出结果进行一下softmax公式计算:
a^{[L]}_i = \frac{e^{Z^{[L]}_i}}{\sum^C_{i=1}e^{Z^{[L]}_i}}ai[L]=∑i=1CeZi[L]eZi[L],并且满足\sum^C_{i=1}a^{[L]}_i = 1∑i=1Cai[L]=1,我们来看一下计算案例:
2.1.2 交叉熵损失
对于softmax回归(逻辑回归代价函数的推广,都可称之为交叉熵损失),它的代价函数公式为:
L(\hat y, y) = -\sum^C_{j=1}y_jlog\hat y_jL(y^,y)=−∑j=1Cyjlogy^j
总损失函数可以记为J = \frac{1}{m}\sum^m_{i=1}L(\hat y, y)J=m1∑i=1mL(y^,y)
逻辑回归的损失也可以这样表示,:
所以与softmax是一样的,一个二分类一个多分类衡量。
对于真实值会进行一个one-hot编码,每一个样本的所属类别都会在某个类别位置上标记。
上图改样本的损失值为:
0log(0.10)+0log(0.05)+0log(0.15)+0log(0.10)+0log(0.05)+0log(0.20)+1log(0.10)+0log(0.05)+0log(0.10)+0log(0.10)0log(0.10)+0log(0.05)+0log(0.15)+0log(0.10)+0log(0.05)+0log(0.20)+1log(0.10)+0log(0.05)+0log(0.10)+0log(0.10)
注:关于one_hot编码
框架使用
- 便于编程:包括神经网络的开发和迭代、配置产品;
- 运行速度:特别是训练大型数据集时;
目前最火的深度学习框架大概是 Tensorflow 了。Tensorflow 框架内可以直接调用梯度下降算法,极大地降低了编程人员的工作量。例如以下代码:
2.1.3 案例:Mnist手写数字识别神经网络实现
2.1.3.1 数据集介绍
文件说明:
- train-images-idx3-ubyte.gz: training set images (9912422 bytes)
- train-labels-idx1-ubyte.gz: training set labels (28881 bytes)
- t10k-images-idx3-ubyte.gz: test set images (1648877 bytes)
- t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes)
网址:http://yann.lecun.com/exdb/mnist/
2.1.3.2 特征值
2.1.3.3 目标值