softmax,softmax-loss,BP的解释



本文转载自:http://freemind.pluskid.org/machine-learning/softmax-vs-softmax-loss-numerical-stability/ ,看完这个博客让我对softmax,softmax-loss以及BP算法有了更深的理解,以前BP只是知道链式求导,知道梯度回传,但是具体到哪些变量和哪些变量求导就有些模糊了,现在我特整理了下思路,以下大部分是链接的原文,附带自己的一些理解(用红色标出)


联想逻辑回归的重要公式就是,得到预测结果,然后再经过sigmoid转换成0到1的概率值,而在softmax中则通过取exponential的方式并进行归一化得到某个样本属于某类的概率。非负的意义不用说,就是避免正负值抵消。


逻辑回归的推导可以用最大似然或最小损失函数,本质是一样的,可以简单理解成加了一个负号,这里的y指的是真实类别。注意下softmax-loss可以看做是softmax和multinomial logistic loss两步,正如上述所写公式,把变量展开即softmax-loss。


原博客的重点在于介绍softmax-loss是分成两步还是一步到位比较好,而我这则重点说下BP。上面这个神经网络的图应该不陌生,这个公式也是在逻辑回归的核心(通过迭代得到w,然后在测试时按照上面这个公式计算类别概率)


这里第一个公式是损失函数对权重w求导,其实就是梯度,红色那部分可以看前面O是怎么算出来的,就知道其导数的形式非常简单,就是输入I。蓝色部分就是BP的核心,回传就是通过这个达到的,回传的东西就是损失函数对该层输出的导数,只有把这个往前回传,才能计算前面的梯度。所以回传的不是对权重的求导,对每层权重的求导的结果会保留在该层,等待权重更新时候使用。具体看上面最后一个公式。


这部分的求导:l(y,z)函数是log函数,log(x)函数求导是取1/x,后面的那个数是zy对zk的导数,当k=y时,那就是1,k不等于y时就是两个不同的常数求导,就是0。


这一部分就是把softmax-loss分成两步来做,第一个求导可以先找到最前面l(y,o)的公式,也是log函数,所以求导比较简单。第二个求导也是查看前面Oi的公式,分母取平方的那种求导。最后链式相乘的结果和原来合并算的结果一样。

### BP神经网络在0-9数字识别中的实现原理 BP(Back Propagation)神经网络是一种基于误差逆向传播算法的多层前馈神经网络,其核心思想是通过不断调整网络中的权重和偏置,使得预测输出尽可能接近真实值。以下是BP神经网络在0-9数字识别中的实现原理的详细解析。 #### 1. 数据预处理 手写数字识别的第一步是对原始图像进行预处理。通常需要将二维统计图转化为一维特征向量以便输入到神经网络中。例如,MNIST数据集中的每张图片为28×28像素的灰度图像,可以将其展平为一个长度为784的一维向量[^1]。 ```python import numpy as np # 假设X是一个包含28x28图像的numpy数组 def preprocess_image(image): return image.flatten() / 255.0 # 归一化并展平 ``` #### 2. 神经网络结构 BP神经网络通常由输入层、隐藏层和输出层组成。对于0-9数字识别任务,输入层的节点数等于图像特征向量的维度(如784),隐藏层的节点数可以根据实验效果调整,输出层的节点数等于类别数(即10个数字)。 #### 3. 损失函数优化 BP神经网络使用损失函数衡量预测值真实值之间的差距,并通过梯度下降法更新权重和偏置。常用的损失函数包括均方误差(MSE)和交叉熵损失(Cross-Entropy Loss)。由于分类问题更适合使用交叉熵损失,因此推荐使用后者。 ```python import tensorflow as tf # 定义模型 model = tf.keras.Sequential([ tf.keras.layers.InputLayer(input_shape=(784,)), tf.keras.layers.Dense(128, activation='relu'), # 隐藏层 tf.keras.layers.Dense(10, activation='softmax') # 输出层 ]) # 编译模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) ``` #### 4. 训练过程 训练神经网络的核心是通过正向传播计算预测值,然后利用反向传播算法更新权重和偏置。训练过程中需要指定批次大小(Batch Size)、迭代次数(Epochs)等超参数[^1]。 ```python # 假设X_train和y_train是训练数据 model.fit(X_train, y_train, epochs=10, batch_size=32) ``` #### 5. 测试评估 训练完成后,可以使用测试集评估模型性能。常用指标包括准确率(Accuracy)、混淆矩阵(Confusion Matrix)等。 ```python from sklearn.metrics import confusion_matrix # 测试模型 y_pred = model.predict(X_test) y_pred_classes = np.argmax(y_pred, axis=1) # 构建混淆矩阵 conf_matrix = confusion_matrix(y_test, y_pred_classes) print(conf_matrix) ``` #### 6. 总结 BP神经网络在手写数字识别中的应用展示了其强大的非线性映射能力。尽管BP网络的内部逻辑复杂且难以完全理解,但其整体解决问题的思路相对清晰:通过不断调整权重和偏置,使模型逐渐逼近最优解。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值