关于神经网络中的代价函数——交叉熵的由来

        这段时间一直在看有关于神经网络的教程,在之前看过的其他一些机器学习算法,例如logistics回归等都是用C =(y− a)2/2函数做cost function,但是在神经网络算法中,有些教程是使用交叉熵作为代价函数的(关于斯坦福大学的深度学习教程依旧使用的是C =(y− a)2/2函数做cost function),这个让我很郁闷,于是我就问了师兄,然后没有然后。。。没有搞懂。我就在网上找了些讲解资料,写得都OK可是都没有深入的阐述一下几个问题:

        a、为什么使用交叉熵,二次代价函数不好吗(毕竟斯坦福的深度学习教程就是用的二次代价函数)?

         b、交叉熵为什么可以作为cost function?这个想法来自于哪里???

        在我看完神经网络与深度学习之后,这些问题迎刃而解了。下面对于以上几个问题进行详细的解答。

二次代价函数的缺陷

        理想情况下,我们都希望和期待神经网络可以从错误中快速地学习,但是在实践过程中并不是很理想。在使用函数C =(y− a)2/2表示的二次代价函数,假设a是神经元的输入,训练输入为x = 1, y = 0为目标输出。使用权重和偏置来表达这个,有a = σ(z),其中z = wx + b。使用链式法则来求权重和偏置的偏导数得:


         其中已经将x = 1y = 0代入。最后权重和偏置的偏导数只与σ(

### 交叉熵代价函数的原理 在机器学习和深度学习领域,交叉熵是一种常用的损失函数,尤其适用于分类问题。它的核心思想来源于信息论中的熵的概念[^1]。 #### 数学定义 假设真实分布为 \( P(x) \),预测分布为 \( Q(x) \),则交叉熵可以表示为: \[ H(P, Q) = -\sum_{x} P(x) \log(Q(x)) \] 其中,\( P(x) \) 是目标的真实概率分布,而 \( Q(x) \) 则是由模型预测的概率分布[^4]。 #### 学习速率的影响 当使用 Sigmoid 函数作为神经网络的激活函数时,如果采用平方误差作为损失函数,则可能会导致梯度消失的问题,从而使得训练过程变得非常缓慢。相比之下,交叉熵损失函数能够有效缓解这一现象,因为它直接依赖于输出层的激活值及其对应的标签值之间的差异[^2]。 具体来说,对于二分类问题,Sigmoid 输出节点给出的是样本属于某一类别的概率估计;而对于多类别情况下的 Softmax 层,则提供了各个可能类别的相对可能性大小。这两种情形下都可以利用相应的形式化表达式来计算每一轮迭代过程中所需调整的方向幅度——即所谓的“学习率”,这取决于成本函数相对于参数变化敏感程度如何体现出来【^3】. ### 实现方式 以下是基于 Python 的简单实现代码片段用于说明如何构建并优化带有交叉熵损失的目标函数: ```python import numpy as np def softmax(z): exp_z = np.exp(z - np.max(z)) return exp_z / exp_z.sum(axis=0) def cross_entropy_loss(y_true, y_pred): m = y_true.shape[0] log_likelihood = -np.log(y_pred[np.arange(m), y_true.argmax(1)]) loss = np.sum(log_likelihood) / m return loss # Example usage with dummy data y_true = np.array([[1., 0., 0.]]) # One-hot encoded labels z = np.random.randn(1, 3) # Raw predictions from the last layer before applying softmax y_pred = softmax(z) loss = cross_entropy_loss(y_true, y_pred) print(f'Cross Entropy Loss: {loss}') ``` 此脚本展示了如何手动编写一个小型框架内的前向传播阶段以及评估最终结果的好坏标准之一—平均交叉熵损耗值。 ### 应用场景 - **图像识别**: 如卷积神经网络(CNNs)常用来解决图片分类任务. - **自然语言处理(NLP)** : 文字序列建模如词嵌入(word embeddings), 句子相似度比较等都广泛运用到了此类技术手段当中去提升性能表现水平。 - **推荐系统**: 用户兴趣偏好挖掘进而提供个性化服务方案设计等方面也有着不可忽视的作用贡献价值所在之处体现得淋漓尽致。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值