博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习中多样本情况下的正向传播与反向传播推导(手写)
阅读量:2052 次
发布时间:2019-04-28

本文共 1704 字,大约阅读时间需要 5 分钟。

在网上看到很多关于机器学习中正向传播与反向传播的介绍,基本上都是基于单样本来进行概括性的讲解和公式的介绍,对于对数学不是很好的我在多样本的情况下容易混乱,因此手写了关于正向和反向传播的计算,在正向传播中比较容易理解,反向传播中要求误差和梯度这是重点要搞明白的。

神经网络模型

首先介绍一下模型,模型是一个三层的神经网络模型,分别是输入层(x),隐藏层( a ( 1 ) a^{(1)} a(1))和输出层( a ( 2 ) a^{(2)} a(2))。在这个模型中也没有添加偏置b和激活函数,我觉得把下面内容理解了,其他添加内容都是比较容易理解的。模型结构如下:

在这里插入图片描述

正向传播

来看一下我们的输入数据( x ( 1 ) x^{(1)} x(1)),是一个4行m列的矩阵,4表示4个特征,m表示m个数据集。

在这里插入图片描述
这边是第一层的权重参数 θ ( 1 ) \theta ^{(1)} θ(1)三行四列,三行四列是根据( a ( 1 ) a^{(1)} a(1))的神经元个数和( x ( 1 ) x^{(1)} x(1))的特征个数组成的矩阵,如下:
在这里插入图片描述
接下来求解 A ( 1 ) A^{(1)} A(1),是一个三行m列的矩阵:
在这里插入图片描述第二层的权重参数一行三列,一行四列是根据( a ( 2 ) a^{(2)} a(2))的神经元个数和( a ( 1 ) a^{(1)} a(1))的神经元个数组成的矩阵,如下:
在这里插入图片描述
最后求的 A ( 2 ) A^{(2)} A(2)也就是最后的预测值,
在这里插入图片描述到这边已经完成了神经网络的正向传播过程。接下来是反向传播。

反向传播

在上面中已经求的最后神经元的值也就是预测值,接下来就是通过预测值和实际值求的最后一层的误差 δ ( 2 ) \delta ^{(2)} δ(2),如下:

在这里插入图片描述
接下来求解第二层的 Δ θ ( 2 ) \Delta \theta ^{(2)} Δθ(2)更新权重参数梯度,应用的公式如下:
Δ θ ( 2 ) = 1 m δ ( 2 ) ( A ( 1 ) ) T \Delta \theta ^{(2)}=\frac{1}{m}\delta ^{(2)}(A^{(1)})^{T} Δθ(2)=m1δ(2)(A(1))T
在这里插入图片描述上面的结果得到一个一行三列的值,分别是第二层权重的梯度值 Δ θ ( 2 ) \Delta \theta ^{(2)} Δθ(2)
还需要求解 A ( 1 ) A^{(1)} A(1)层的误差 δ ( 1 ) \delta ^{(1)} δ(1),反向传播计算中,因为第一层是输入变量 x ( 1 ) x^{(1)} x(1),不存在误差。只计算到 A ( 1 ) A^{(1)} A(1)层对应的误差,对应的公式如下:
δ ( 1 ) = ( θ 2 ) T δ ( 2 ) ∗ a ( 1 ) ( 1 − a ( 1 ) ) \delta ^{(1)}=(\theta ^{2})^{T}\delta ^{(2)}*a^{(1)}(1-a^{(1)}) δ(1)=(θ2)Tδ(2)a(1)(1a(1))

在这里插入图片描述最终求的第一层更新权重参数的梯度 Δ θ ( 1 ) \Delta \theta ^{(1)} Δθ(1)在这里插入图片描述经过这一轮后,一共求的 Δ θ ( 1 ) \Delta \theta ^{(1)} Δθ(1) Δ θ ( 2 ) \Delta \theta ^{(2)} Δθ(2)的更新梯度值,然后更新模型,即

θ ( 1 ) : = θ ( 1 ) − α Δ θ ( 1 ) \theta ^{(1)}:=\theta ^{(1)}-\alpha\Delta \theta ^{(1)} θ(1):=θ(1)αΔθ(1)
θ ( 2 ) : = θ ( 2 ) − α Δ θ ( 2 ) \theta ^{(2)}:=\theta ^{(2)}-\alpha\Delta \theta ^{(2)} θ(2):=θ(2)αΔθ(2)

整个流程计算如下:

在这里插入图片描述在这里插入图片描述在上述多样本正向传播和反向传播中,如果有地方存在错误麻烦提出来我改正,谢谢。

转载地址:http://nfulf.baihongyu.com/

你可能感兴趣的文章
[译]数据包在 Kubernetes 中的一生(1)
查看>>
[译]数据包在 Kubernetes 中的一生(2)
查看>>
[译]数据包在 Kubernetes 中的一生(3)
查看>>
从源头解决 Service Mesh 问题最彻底!
查看>>
一次“不负责任”的 K8s 网络故障排查经验分享
查看>>
一次有趣的 Docker 网络问题排查经历
查看>>
KubeSphere Meetup 北京站火热报名中 | 搭载 CIC 2021 云计算峰会
查看>>
深入理解 Linux Cgroup 系列(一):基本概念
查看>>
深入理解 Linux Cgroup 系列(二):玩转 CPU
查看>>
云原生周报第 1 期 | 2019-06-24~2019-06-28
查看>>
Kubernetes Pod 驱逐详解
查看>>
kubectl 创建 Pod 背后到底发生了什么?
查看>>
[译] Kubernetes 儿童插图指南
查看>>
云原生周报第 2 期 | 2019-07-01~2019-07-05
查看>>
kubectl 创建 Pod 背后到底发生了什么?
查看>>
Kube-scheduler 源码分析(二):调度程序启动前逻辑
查看>>
kubernetes 1.15 有哪些让人眼前一亮的新特性?
查看>>
云原生周报:第 3 期
查看>>
深入理解 Linux Cgroup 系列(三):内存
查看>>
7月最新Java微服务资料
查看>>