[深度之眼机器学习训练营第四期]神经网络之参数学习

损失函数

为了学习神经网络中的参数,我们要为神经网络模型定义损失函数。回想一下,逻辑回归可以将数据分成正例和负例两类,因此它的损失函数为:
\[
J(\theta) = -\frac{1}{n}\sum_{i=1}^n \left[y^{(i)}\log(h_\theta(x^{(i)}) ) + (1-y^{(i)})\log(1-h_\theta(x^{(i)}))\right] + \frac{\lambda}{2n}\sum_{j=1}^n\theta^2_j
\]

而对于神经网络模型,其输出层可能有多个神经元,因此我们需要在逻辑回归损失函数的基础上考虑多个类别的问题。假设模型共有\(K\)个输出层神经元,那么其损失函数为:

\[
\begin{gathered} J(\Theta) = - \frac{1}{n} \sum_{i=1}^n \sum_{k=1}^K \left[y^{(i)}_k \log ((h_\Theta (x^{(i)}))_k) + (1 - y^{(i)}_k)\log (1 - (h_\Theta(x^{(i)}))_k)\right] + \frac{\lambda}{2n}\sum_{l=1}^{L-1} \sum_{i=1}^{s_l} \sum_{j=1}^{s_{l+1}} ( \Theta_{j,i}^{(l)})^2\end{gathered}
\]

其中\(L\)表示神经网络模型的层数,\(s_{l}\)则表示每一层神经元的数量。

误差反向传播算法

神经网络的参数学习过程是通过误差反向传播算法与梯度下降法(或其他优化算法)完成的,其中误差反向传播算法用来计算每层参数的梯度,梯度下降法用来更新每一层的参数。在介绍误差反向传播算法之前,我们先回顾一下前向传播的过程。

假设我们有一个4层的神经网络,每层的参数用\(\Theta^{(l)}\)表示,激活函数使用sigmoid函数,那么它的前向传播进行预测过程如下:
\[
\begin{aligned}
a^{(1)} &= x\ z^{(2)} &= \Theta^{(1)}a^{(1)} \ a^{(2)} &=g(z^{(1)})\ z^{(3)} &= \Theta^{(2)}a^{(1)} \ a^{(3)} &=g(z^{(3)})\ z^{(4)} &= \Theta^{(3)}a^{(3)}\ h_{\Theta}(x)&=a^{(4)} =g(z^{(4)})\\end{aligned}
\]

误差反向传播,顾名思义,就是误差沿着神经网络从最后一层传递到第一层。我们用\(\delta^{(l)}\)表示每层的误差。首先,我们先来看一下最后一层的误差是如何计算的:

\[
\begin{aligned}
\delta^{(4)} = \frac{\partial J}{\partial z^{(4)}}
&= \frac{\partial}{\partial z^{(4)}}\left[-y\log(h_{\Theta}(x)) -(1-y)\log(1-h_{\Theta}(x))\right]\ &= \frac{\partial}{\partial z^{(4)}}[-y\log(g(z^{(4)}))-(1-y)\log(1-g(z^{(4)}))]\ &= -y\frac{1}{g(z^{(4)})}g(z^{(4)})(1-g(z^{(4)}))-(1-y)\frac{1}{1-g(z^{(4)})}(-1)g(z^{(4)})(1-g(z^{(4)}))\ &= -y(1-g(z^{(4)})) +(1-y)g(z^{(4)})\ &= g(z^{(4)}) -y\ &= a^{(4)} - y
\end{aligned}
\]

通过求导计算出第4层的误差后,我们就可以通过链式法则计算前面几层的误差,这里给出了第3层的误差计算过程,其中\(\circ\)表示矩阵的Hadamard积:

\[
\begin{aligned}
\delta^{(3)} = \frac{\partial J}{\partial z^{(3)}} &=\frac{\partial J}{\partial z^{(4)}} \frac{\partial z^{(4)}}{\partial z^{(3)}}\ &= \frac{\partial J}{\partial z^{(4)}} \frac{\partial z^{(4)}}{\partial a^{(3)}}\frac{\partial a^{(3)}}{\partial z^{(3)}}\ &=\left(\left(\Theta^{(3)}\right)^T \delta^{(4)}\right) \circ g'(z^{(3)})
\end{aligned}
\]

其中sigmoid函数的导数\(g'(\cdot)\)为:
\[
g'(z^{(l)}) = a^{(l)} \circ (1-a^{(l)})
\]

通过链式法则和下面的公式,我们可以按照顺序求出\(\delta^{(L-1)},\delta^{(L-2)},\cdots,\delta^{(2)}\):
\[
\delta^{(l)} = \left(\left(\Theta^{(l)}\right)^T \delta^{(l+1)}\right) \circ g'(z^{(l)}) \quad 2 \le l \le L-1
\]

在求解出每一层的梯度后,我们就可以使用不同的优化算法,比如梯度下降,来更新神经网络模型的参数了。

随机初始化

在训练神经网络的过程中,参数初始化方式非常关键。将所有的参数初始化为0并不是一种好方法,那样在反向传播过程中所有的神经元就会重复地更新相同的值。一般来说,我们通常使用随机初始化方法。

原文地址:https://www.cnblogs.com/littleorange/p/12271174.html

时间: 2024-10-01 03:43:47

[深度之眼机器学习训练营第四期]神经网络之参数学习的相关文章

[深度之眼机器学习训练营第四期]过拟合与正则化

基本概念 机器学习模型面临的两个主要问题是欠拟合与过拟合.欠拟合,即模型具有较高的偏差,说明模型没有从数据中学到什么,如下左图所示.而过拟合,即模型具有较高的方差,意味着模型的经验误差低而泛化误差高,对新数据的泛化能力差,如下右图所示. 通常,欠拟合是由于模型过于简单或使用数据集的特征较少导致的.相反,过拟合则是模型过于复杂或特征过多引起的.欠拟合的问题比较容易解决,而过拟合的问题则有些棘手.一般而言,解决过拟合的方法包括降维和正则化. 正则化损失函数 正则化是通过向损失函数中添加惩罚项以限制参

[深度之眼机器学习训练营第四期]对数几率回归

基本概念 对数几率回归(Logistic Regression,又称逻辑回归)可以用来解决二分类和多分类问题.分类问题中,输出集合不再是连续值,而是离散值,即\(\mathcal{Y}\in \{0,1,2,\cdots\}\).以二分类问题为例,其输出集合一般为\(\mathcal{Y}\in \{0,1\}\). 为了解决二分类问题,对数几率回归在线性回归的基础上引入Sigmoid函数(Logistic函数),其中\(\exp(\cdot)\)是自然指数: \[ g(z) = \dfrac{

深度之眼PyTorch训练营第二期 ---基础数据结构-张量

一.Tensor概念 张量:多维数组,标量.向量.矩阵的高维拓展 Tensor与Variable torch.autograd.Variable:数据类型,主要用于封装Tensor,进行自动求导,五个属性: data:被包装的Tensor grad:data的梯度 grad_fn:创建Tensor的Function,自动求导的关键 requires_grad:指示是否需要梯度 is_leaf:指示是否是叶子结点(张量) PyTorch0.4.0之后,Variable并入Tensor dtype:

深度之眼PyTorch训练营第二期 ---5、Dataloader与Dataset

一.人民币二分类 描述:输入人民币,通过模型判定类别并输出. 数据:四个子模块 数据收集 -> img,label 原始数据和标签 数据划分 -> train训练集 valid验证集 test测试集 数据读取 -> DataLoader ->(1)Sampler(生成index) (2)Dataset(读取Img,Label) 数据预处理 -> transforms 1.DataLoader torch.utils.data.DataLoader  功能:构建可迭代的数据装载

深度之眼PyTorch训练营第二期 ---2、张量操作与线性回归

一.张量的操作:拼接.切分.索引和变换 1.拼接 (1)torch.cat()  功能:将张量按照维度dim进行拼接(不会扩张) tensors:张量序列 dim:要拼接的维度 (2)torch.stack()  功能:在新创建的维度dim上进行拼接(会扩张张量的维度) tensors:张量序列 dim:要拼接的维度 (3)torch.chunk()  功能:将张量按维度dim进行平均切分     返回值:张量列表 注意:若不能整除,最后一份张量小于其他张量 input:要切分的张量 chunk

深度之眼PyTorch训练营第二期 ---3、计算图与动态图机制

一.计算图 1.计算图是用于描述运算的有向无环图. 主要有两个元素:结点(Node).边(edge) 结点表示数据,如向量.矩阵.张量 边表示运算,如加减乘除卷积等 例子:用计算图表示 y = (x + w) * (w + 1) 拆分:a = x + w  b = w + 1  --->   y = a * b 2.计算图与梯度求导 =b * 1 + a * 1 =b + a =(w+1) + (x+w) =2*w + x + 1 =2 * 1 + 2 + 1 =5 y到w所有路径 3.叶子结点

深度之眼PyTorch训练营第二期 --- 8、权值初始化

一.梯度消失与爆炸 二.Xavier方法与Kaiming方法 1.Xavier初始化 方差一致性:保持数据尺度维持在恰当范围,通常方差为1 激活函数:饱和函数,如Sigmoid,Tanh 三.常用初始化方法 10种: Xavier均匀分布.正态分布 Kaiming均匀分布.正态分布 均匀分布.正态分布.常数分布 正交矩阵初始化 单位矩阵初始化 稀疏矩阵初始化 nn.init.Calculate_gain 主要功能:计算激活函数的方差变化尺度 主要参数 nonlinearity:激活函数名 par

机器学习升级版第七期

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

机器学习及其matlab实现竞争神经网络与SOM神经网络进阶与提高视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv