首页 > 其他分享 >精神网络学习笔记

精神网络学习笔记

时间:2023-04-26 10:58:47浏览次数:51  
标签:mathbf dfrac sum 网络 笔记 学习 ij theta partial

本篇接上篇 深度学习笔记 喵~

1. 精神网络模型

考虑到在之前的模型中,我们训练的模型的决策界限都可以轻易找到其表达式,相对来说较为简单,我们下面来看一个复杂的模型,精神网络。

精神网络模型是通过模仿人的神经元的出的模型,即大脑中一般会分为多层神经元,第一层神经元负责接受一个输入,然后刺激第二层神经元,第二层神经元再刺激第三层神经元,最终将信息传输到大脑里。并且相邻两层在刺激的时候会对信号进行加工,以至于最终可以识别出信息。

我们之前讲的各种回归可以看作为一个两层神经元的配合,即通过输入一个向量 \(\mathbf{x}\),将向量的第 \(i\) 个分量 \(x_i\) 的值作为第一层输入层神经元的输入,然后第二层神经元的输入是第一层神经元的输入通过一个函数 \(h_{\mathbf{\theta}}(\mathbf{x})\) 计算得出(即第二层的输入是第一层的输出)。最终第二层精神元的输入即视作分类结果(即该数据被分到正类的概率)。

img

我们可以考虑更加复杂的情况,即在输入层和输出层之间多加几层神经元,我们称为隐藏层,然后这些隐藏层的输入也为上一层的输出。

即如果我们设 \(\mathbf{a}^{(i)}\) 为第 \(i\) 层精神元的输入,那么我们就可以对于每一层建立都建立一个函数模型:

\[\mathbf{a}^{(i + 1)} = h_{\mathbf{\Theta}^{(i)}}(\mathbf{a}^{(i)}) = g((\Theta^{(i)})^{\mathbf{T}} \mathbf{x}) \]

如果 \(\mathbf{x}\) 为一个 \(m\) 维向量,则我们约定记号 \(g(\mathbf{x})\) 代表 \(g(\mathbf{x}) = [g(x_1), g(x_2), \cdots, g(x_m)]^{\mathbf{T}}\)。我们将 \(g(x)\) 称为激活函数,一般我们会使用非线性函数来作为激活函数。

同样,我们在输入层和隐藏层中,每层加一个偏置量,即为图中的 \(a_0^{(i)}\),和之前的两个回归的做法相似,我们让这个偏置量等于 1,所有的 \(a_0^{(i)} = 1\).

下图即为我们精神网络模型,我们将第 \(i\) 层非偏置结点的数量记作 \(s_i\),精神网络的层数记为 \(L\).

img

综上所述,对于第 \(k + 1\) 层的输入向量的第 \(j\,(j > 0)\) 个分量 \(a_j^{(k + 1)}\),它和第 \(k\) 层的关系为:

\[a_j^{(k + 1)} = g\bigg(\sum_{i = 0}^{s_k} \theta_{ij}^{(k)} a_i^{(k)}\bigg) \]

我们不妨设 \(z_j^{(k + 1)} = \sum_{i = 0}^{s_k} \theta_{ij}^{(k)} a_i^{(k)}\),此时我们将此式简化为 \(a_j^{(k + 1)} = g(z_j^{(k + 1)})\)。

2. 反向传播算法

我们还是希望通过梯度下降算法来训练精神网络模型。故接下来我们就要定义该模型代价函数了。我们可以像线性回归那样,将代价函数简单的定义为:

\[J(\Theta) = \frac{1}{2m} \bigg[ \sum_{i = 1}^m \sum_{j = 1}^{s_L} (a_j^{(L, i)} - y_j^{(i)})^2 + \lambda\sum_{k = 1}^{L - 1} \sum_{i = 1}^{s_k} \sum_{j = 1}^{s_{k + 1}}(\theta_{ij}^{(k)})^2 \bigg] \]

其中 \(a_j^{(L, i)}\) 为将训练集中第 \(i\) 组数据作为精神网络的输入,得到的输出向量中,第 \(j\) 个分量的值。如果我们将精神网络看作关于矩阵序列 \(\Theta\) 的一个函数模型,那么其实 \(a_j^{(L, i)} = \mathbf{h}_{\Theta}(\mathbf{x}_i)_j\).

不难发现尽管后面的那个三重和式求偏导非常容易,但是前面 \(a_j^{(L, i)}\) 是一个复合函数,对其求偏导非常麻烦,即难点主要集中在 \(\sum_{j = 1}^{s_L} (a_j^{(L, i)} - y_j^{(i)})^2\)。由链式法则的启发,我们就考虑相邻两层之间的偏导如何表示。

我们就仅考虑一组数据如何求 \(J(\Theta) = \frac{1}{2}\sum_{j = 1}^{s_L} (a_j^{(L)} - y_j)^2\) 的梯度,而之后对于多组数据,就对于各组数据分别求梯度然后相加即可。显然对于 \(\frac{\partial J}{\partial \theta_{ij}^{(k)}}\) 来说,根据求导的链式法则,我们有如下递推关系:

\[\frac{\partial J}{\partial \theta_{ij}^{(k)}} = \sum_{j = 1}^{s_{k + 1}} \dfrac{\partial z_j^{(k + 1)}}{\partial \theta_{ij}^{(k)}} \dfrac{\partial a_j^{(k + 1)}}{\partial z_j^{(k + 1)}} \dfrac{\partial J}{\partial a_j^{(k + 1)}} \\ \frac{\partial J}{\partial a_i^{(k)}} = \sum_{j = 1}^{s_{k + 1}} \dfrac{\partial z_j^{(k + 1)}}{\partial a_i^{(k)}} \dfrac{\partial a_j^{(k + 1)}}{\partial z_j^{(k + 1)}} \dfrac{\partial J}{\partial a_j^{(k + 1)}} \]

递推边界为 \(\frac{\partial J}{\partial a_i^{(L)}} = a_i^{(L)} - y_i\).

而显然 \(\dfrac{\partial a_j^{(k + 1)}}{\partial z_j^{(k + 1)}} = g'(z_j^{(k + 1)}), \dfrac{\partial z_j^{(k + 1)}}{\partial \theta_{ij}^{(k)}} = a_i^{(k)}, \dfrac{\partial z_j^{(k + 1)}}{\partial a_i^{(k)}} = \theta_{ij}^{(k)}\),故有:

\[\frac{\partial J}{\partial \theta_{ij}^{(k)}} = \sum_{j = 1}^{s_{k + 1}} a_i^{(k)} g'(z_j^{(k + 1)}) \dfrac{\partial J}{\partial a_j^{(k + 1)}} \\ \frac{\partial J}{\partial a_i^{(k)}} = \sum_{j = 1}^{s_{k + 1}} \theta_{ij}^{(k)} g'(z_j^{(k + 1)}) \dfrac{\partial J}{\partial a_j^{(k + 1)}} \]

这样我们就可以通过先将数据作为输出,逐层计算其输出,然后从最后一层从后往前递推,求出所有的 \(\frac{\partial J}{\partial \theta_{ij}^{(k)}}\),进而得到 \(\nabla J\),然后就可以梯度下降了。

标签:mathbf,dfrac,sum,网络,笔记,学习,ij,theta,partial
From: https://www.cnblogs.com/Nickel-Angel/p/17354970.html

相关文章

  • 动态规划笔记
    动态规划的原理从做题来看我认为动态规划就是将递归的过程反向,以此来避免反复使用递归的函数进行反复的压栈,弹栈同时避免访问很多已经计算过的分支。就比如f(a)=f(a-1)+f(a-2)这个递推式,假设我们最终想要知道f(n)的值,那么我们可以使用一个递归函数f参数是i,进行递归调用。这样当......
  • 面向车载通信的TSN网络原型下篇:效果验证
    前言  在上一篇文章中,我们概述性地介绍了北汇信息的面向车载通信的TSN网络原型上篇:原型概述。本篇文章将基于该原型,通过在多个场景中验证TSN协议的效果,向读者展示TSN在车载网络中的价值。通过实验验证,我们将深入了解TSN技术在车载网络中的实际应用和性能表现,为读者提供更为深......
  • Unity性能优化课程学习笔记(Metaverse大衍神君)
    课程来源于:https://space.bilibili.com/1311706157 性能优化之道:      等待函数:  SSAO:  AA方案:  后处理: 渲染提前期优化culling,simplization,batchingCulling     Simplization:      Ba......
  • C++学习 第十二天
    今日学习内容:继承 多态 虚函数和抽象函数 继承:优点:可以实现代码复用,节省代码量分类:单继承 多继承 单继承:语法:class 子类类名:继承访问修饰符 父类类名{成员};父类:子类: 继承:继承修饰符:publicprotectedprivate当继承修饰是 public时 访问权......
  • C++ 学习 第十一天
    今日学习内容:面向对象 面向对象:优势:可以实现数据类型扩展易于理解 呈现形式:类 特性:封装:先将成员绑定为一个整体,再将被绑定成员划分权限,所以在类中,成员和成员直接不遵从代码顺序结构权限:public 公有的:类内可以访问 子类可以访问 类外可以访问privat......
  • 英语笔记:入门介绍
    短期快速掌握语法基础,不同时做几件事同时学语法和词汇,用造句的方法来学语法,再结合阅读巩固积累词汇,进而掌握造句和理解句子的能力,有了这个基础,再学发音,口语和听力,就容易多了。语法知识练习复习虽然能截取视频画面,但是最多一百张,字多了确实累,那还不如直接抄下来,在加上对自己......
  • python+playwright 学习-56 svg 元素定位
    前言SVG英文全称为ScalablevectorGraphics,意思为可缩放的矢量图,这种元素比较特殊,需要通过​name​()函数来进行定位。svg元素定位如下看到的svg标签,就是svg元素用普通的标签定位,是无法定位的,如xpath的//svg只能通过name()函数来定位//*[name()="svg"]页面上用......
  • 学习MASA第二天:框架分析
    学习MASA第二天:框架分析今天主要是看了下MASATeam的github,目的是对未来设计开源框架选型。对于目前比较火的国内masaframework。当然是首当其冲是要用一用的。masaframework地址:MASA.Framework构思开源框架可行性方案目前看,用masa.stack有点大,对于我们这种个人项目不......
  • 00系统分析员 笔记3
    1,商业应用系统开发经历了三个阶段一个阶段以计算为中心,分析设计围绕程序的运行效率,算法优劣,存贮优化来进行。90年代的大学课程讲的都是这些。第二阶段以数据为中心,分析设计围绕数据流进行,以数据流程来模拟业务流程。这也就是所谓的面向过程的分析模式。第三阶段以人为中心,分析......
  • 软件工程日报——《用户故事与迅捷方法》读书笔记二
    今天,我又读了一会儿《用户故事与迅捷方法》,有了新的心得体会:用户故事是敏捷开发中的一种技术,用于描述系统的功能需求。迅捷方法是一种敏捷开发方法,旨在通过快速迭代和反馈来提高软件开发的效率和质量。这点在实际开放上很重要,在开发过程上要重点关注用户故事,了解用户的需求和各......