全连接神经网络详解(Full Connect Neural Network)

2023-11-02


前言

深度学习最基础的网络类型的之一,全连接神经网络(Full Connect Neural Network)是大多数入门深度学习领域的初学者必学的内容,充分体现深度学习方法相比于传统机器学习算法的特点,即大数据驱动、去公式推导、自我迭代更新、黑匣子训练等。

本文介绍单层神经网络、浅层神经网络和深层神经网络,循序渐进地加深对于深度学习基本概念的理解。需要注意的是所有代码基于飞桨PaddlePaddle架构实现。


一、单层神经网络

Logistic回归模型是最简单的单层网络,常被用来处理二分类问题,它使一种用于分析各种影响因素 ( x 1 , x 2 , … , x n ) (x_1,x_2,…,x_n) (x1,x2,,xn)与分类结果 y y y之间的有监督学习方法。

1.1 正向传播

此计算过程等同于线性回归计算,即给每一个输入向量x分配权值,计算出一个结果向量z。同时,为了使神经网络具有非线性特点,引入激活函数来处理线性变换得到的数值。

  • 线性变换(加权和偏置): z = w T x + b z=w^Tx+b z=wTx+b
  • 非线性变换(激活函数): δ ( x ) = 1 1 + e − z \delta (x) = \frac{1}{{1 + {e^{ - z}}}} δ(x)=1+ez1

上式中 w w w为权值, b b b为偏置, x x x为输入值, z z z为线性输出值, δ \delta δ为非线性输出值。

1.2 损失函数

模型需要定义损失函数来对参数 w w w b b b进行优化,损失函数的选择需要具体问题具体分析,以下为两种常见损失函数计算公式。

  • 平方损失函数: L ( y ^ , y ) = 1 2 ( y ^ − y ) 2 L(\hat y,y) = \frac{1}{2}{(\hat y - y)^2} L(y^,y)=21(y^y)2
  • 对数似然损失函数: L ( y ^ , y ) = − [ y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) ] L(\hat y,y) = - [y\log \hat y + (1 - y)\log (1 - \hat y)] L(y^,y)=[ylogy^+(1y)log(1y^)]

上式中 y ^ \hat y y^为计算结果, y y y为实际结果

1.3 梯度下降

梯度下降是一种前反馈计算方法,反映的是一种“以误差来修正误差”的思想,亦是神经网络进行迭代更新的核心过程。

  • 迭代更新: ω = ω − α d L ( ω ) d ω \omega = \omega - \alpha \frac{{dL(\omega )}}{{d\omega }} ω=ωαdωdL(ω)
  • 链式法则: d L ( a , y ) d ω = d L ( a , y ) d a ⋅ d a d z ⋅ d z d ω \frac{{dL(a,y)}}{{d\omega }} = \frac{{dL(a,y)}}{{da}} \cdot \frac{{da}}{{dz}} \cdot \frac{{dz}}{{d\omega }} dωdL(a,y)=dadL(a,y)dzdadωdz

单层网络的代码(Numpy实现和飞桨实现)

二、浅层神经网络

浅层神经网络相比单层网络的差别在于隐藏层有多个神经节点,这就使得其可以处理“多输入多输出”的复杂问题。每一层的每一个节点都与上下层节点全部连接,这种神经网络称作全连接网络。

2.1 正向传播

z [ 1 ] = ( z 1 [ 1 ] z 2 [ 1 ] z 3 [ 1 ] ) = ( w 1 ( 1 ] T ⋅ x + b 1 ( 1 ) w 2 [ 1 ] T ⋅ x + b 2 [ 1 ] w 3 [ 1 ] T ⋅ x + b 3 [ 1 ] ) = ( w 1 [ 1 ] T ⋅ x w 2 [ 1 ] T ⋅ x w 3 ( 1 ] T ⋅ x ) + b [ 1 ] = W [ 1 ] x + b [ 1 ] a [ 1 ] = ( a 1 [ 1 ] a 2 [ 1 ] a 3 [ 1 ] ) = ( t ( z 1 ( 1 ] ) t ( z 2 ( 1 ] ) t ( z 3 [ 1 ] ) ) = t ( z 1 [ 1 ] z 2 [ 1 ] z 3 [ 1 ] ) = t ( z [ 1 ] ) \begin{array}{c} z^{[1]}=\left(\begin{array}{c} z_{1}^{[1]} \\ z_{2}^{[1]} \\ z_{3}^{[1]} \end{array}\right)=\left(\begin{array}{l} w_{1}^{(1] T} \cdot x+b_{1}^{(1)} \\ w_{2}^{[1] T} \cdot x+b_{2}^{[1]} \\ w_{3}^{[1] T} \cdot x+b_{3}^{[1]} \end{array}\right)=\left(\begin{array}{l} w_{1}^{[1] T} \cdot x \\ w_{2}^{[1] T} \cdot x \\ w_{3}^{(1] T} \cdot x \end{array}\right)+b^{[1]}=W^{[1]} x+b^{[1]} \\ a^{[1]}=\left(\begin{array}{l} a_{1}^{[1]} \\ a_{2}^{[1]} \\ a_{3}^{[1]} \end{array}\right)=\left(\begin{array}{c} t\left(z_{1}^{(1]}\right) \\ t\left(z_{2}^{(1]}\right) \\ t\left(z_{3}^{[1]}\right) \end{array}\right)=t\left(\begin{array}{c} z_{1}^{[1]} \\ z_{2}^{[1]} \\ z_{3}^{[1]} \end{array}\right)=t\left(z^{[1]}\right) \end{array} z[1]=z1[1]z2[1]z3[1]=w1(1]Tx+b1(1)w2[1]Tx+b2[1]w3[1]Tx+b3[1]=w1[1]Txw2[1]Txw3(1]Tx+b[1]=W[1]x+b[1]a[1]=a1[1]a2[1]a3[1]=t(z1(1])t(z2(1])t(z3[1])=tz1[1]z2[1]z3[1]=t(z[1])

  • 上角标中括号用于区分不同层
  • 下角标数字表示神经元节点的映射关系
  • 一个神经元节点包含上一层节点数 ω x ω_x ωx b x b_x bx和下一层节点数 z y z_y zy

2.2 反向传播

  • 梯度下降法
    W = W − α ∂ L ∂ W b = b − α ∂ L ∂ b \begin{aligned} \boldsymbol{W} &=\boldsymbol{W}-\alpha \frac{\partial L}{\partial \boldsymbol{W}} \\ b &=b-\alpha \frac{\partial L}{\partial b} \end{aligned} Wb=WαWL=bαbL
  • 向量表达式
    W [ 1 ] = ( w 1 [ 1 ] , w 2 [ 1 ] , w 3 [ 1 ] ) T = [ w 1 [ 1 ] T w 2 [ 1 ] T w 3 [ 1 ]   T ] = [ w 11 [ 1 ] , w 12 [ 1 ] w 21 [ 1 ] , w 22 [ 1 ] w 31 [ 1 ] , w 32 [ 1 ] ] b [ 1 ] = [ b 1 [ 1 ] b 2 [ 1 ] b 3 [ 1 ] ] \boldsymbol{W}^{[1]}=\left(\boldsymbol{w}_{1}^{[1]}, \boldsymbol{w}_{2}^{[1]}, \boldsymbol{w}_{3}^{[1]}\right)^{\mathrm{T}}=\left[\begin{array}{l} \boldsymbol{w}_{1}^{[1]^{\mathrm{T}}} \\ \boldsymbol{w}_{2}^{[1] \mathrm{T}} \\ \boldsymbol{w}_{3}^{[1] \mathrm{~T}} \end{array}\right]=\left[\begin{array}{c} w_{11}^{[1]}, w_{12}^{[1]} \\ w_{21}^{[1]}, w_{22}^{[1]} \\ w_{31}^{[1]}, w_{32}^{[1]} \end{array}\right] \quad b^{[1]}=\left[\begin{array}{l} b_{1}^{[1]} \\ b_{2}^{[1]} \\ b_{3}^{[1]} \end{array}\right] W[1]=(w1[1],w2[1],w3[1])T=w1[1]Tw2[1]Tw3[1] T=w11[1],w12[1]w21[1],w22[1]w31[1],w32[1]b[1]=b1[1]b2[1]b3[1]

浅层网络的代码(Numpy实现和飞桨实现)

三、深层神经网络

随着网络的层数增加,每一层对于前一层次的抽象表示更深入。在神经网络中,每一层神经元学习到的是前一层神经元值的更抽象的表示。例如第一个隐藏层学习到的是"边缘”的特征,第二个隐藏层学习到的是由‘边缘"组成的"形状”的特征,第三个隐藏层学习到的是由"形状"组成的“图案”的特征,最后的隐藏层学习到的是由“图案"组成的"目标"的特征。通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。

3.1 ImageNet发展史

针对ImageNet数据集的图像分类任务,人们提出了许多重要的网络模型,生动形象地向我们展示了深层网络的巨大优势,回顾整个发展史能够发现,深度学习的网络层数从8层到152层逐步增加,网络分类的能力也越来越强。

年份 算法 错误率 主要贡献
1994 LeNet5 - 卷积、池化和全连接,标志CNN的诞生
2012 Alex 15.3% ReLU、Dropout、归一化
2014 GoogLeNet 6.66% 没有最深只有更深、Inception模块
2015 ResNet 3.57% 152层,深度残差网络
2016、2017 Soushen、Momenta 2.99%、2.251% SE模块嵌入残差网络

3.2 网络参数

  • 参数:指算法运行迭代、修正最终稳定的值。权重W和偏置b。
  • 超参:开发者人为设定的值。学习率、迭代次数、隐藏层层数、单元节点数、激活函数等

深层网络的代码(Numpy实现和飞桨实现)

总结及展望

全连接神经网络可以用来解决回归任务、预测任务和分类任务,在不考虑计算机性能的条件下,无脑设置更深层次的网络模型往往可以取得更好的效果。本质上它是一种线性神经网络,无法避免地要面临处理非线性数据集精度差的问题。优化主要集中在以下几个方面。
  • 非线性因素:围绕激活函数展开来说,提高计算速率就要使激活函数去积分化、去微分化、易求偏导,解决梯度消失和梯度爆炸的问题。
  • 迭代更新策略:围绕反向传播更新权值和偏置,如损失函数选择、优化器选择、学习率衰减策略等等,在一定程度上可以提高精度。这类问题本质上仍是一种寻优算法的探索,可以引入遗传算法、差分进化、多目标优化等寻找pareto最优解,
  • 骨干网络:网络应该设置多少层,每一层应该有多少个节点,从来没有一套标准的设计模板,毫无方向的在不断测试中摸索前进。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全连接神经网络详解(Full Connect Neural Network) 的相关文章

随机推荐

  • Unity3D教程:fbx动画

    Unity3D教程fbx动画 在官方提供的例子 可以找到主角的fbx文件 将此文件放到自己的Assets文件夹下 Unity3D中的Project面板会将其刷新出来 但是如下图所示 动作信息是没有经过分割的 一定要注意 不要选择Hierar
  • line 1-19/19(END)怎么解决?

    在Linux中经常会遇到下图这种现象 其实这是一种很正常的现象 我们只需要按一下Q键就可以正常输入命令了
  • 笔记本电脑开启电脑卓越性能-将CPU拉到最满仅需一条指令

    在Windows的PowerShell工具组中运行下面代码 powercfg duplicatescheme e9a42b02 d5df 448d aa00 03f14749eb61 然后打开电源选项 就会看到比原来多出一个卓越性能选项 保
  • windows下各调试器条件断点实例

    0x00 前言 发现网上很多关于ollydbg和windbg的条件断点的设置是错误的 所以这里总结下 0x01 字符串条件断点 ollydbg unicode字符串 bp kernel32 CreateFileW UNICODE esp 4
  • SQL-labs的第34关——报错注入 宽字节注入(POST)

    1 尝试进行注入 输入语句 账号 1 密码 1 返回页面如下 发现该关还是会向危险字符自动添加斜杠 2 中和干扰符 输入语句 id 1 df 返回页面如下 我们发现无法中和反斜杠 3 使用burp工具进行注入 截取数据包 进行注入 输入语句
  • 列表和元组元素的增加

    对于列表 元素是可以改变的 可以直接用内置函数来实现 l t for i in range 50 l append i t i print l print t 元组元素可以拼接但是不能增删 对于元组 其元素是不可以直接增加 但是可以通过元组
  • 网络编程之基础与接口函数

    一 网络编程 1 网络基础 相关历史 第一阶段 ARPANET 阿帕网 是网络基础协议的雏形 第二阶段 第一份IP协议说明书 协议 两者之间需遵守的约定 第三阶段 TCP IP 网络程序框架 C S B S C S 表示客服端 服务器设计框
  • X86和X64运行环境下C++调用汇编函数源码和解释

    备注 这里给出的代码是在Win10系统中VS2022开发环境下编译测试通过的 X86环境下C 调用汇编函数 c 代码 include
  • 【以太网硬件十三】SGMII和1000base-X有什么异同?

    个人主页 highman110 作者简介 一名硬件工程师 持续学习 不断记录 保持思考 输出干货内容 目录 MII接口类型 MII GMII RGMII SGMII SGMII与1000base X的异同 通过前面的文章我们已经知道了100
  • 十分淫霸的Mooege&MadCow,你懂得。

    支持伟大的暴雪 支持正版 更支持热心的Mooege组织 Just can t waiting for it 纯粹为了体验 Contents hide 1 Must Have Requirements 2 Requirements 3 Qui
  • C++11 类的六大基本成员函数默认生成,default字段的含义

    总览 核心 编译器会为一个类按需自动生成成员函数 C 98 构造 析构 拷贝构造 拷贝赋值 C 11 有了右值 就多了两个 移动构造和移动赋值 功能 构造 无参构造 T 析构 调用成员变量析构 T 拷贝构造 同类型对象初始化 T a b a
  • Redis源码分析(一)--Redis结构解析

    从今天起 本人将会展开对Redis源码的学习 Redis的代码规模比较小 非常适合学习 是一份非常不错的学习资料 数了一下大概100个文件左右的样子 用的是C语言写的 希望最终能把他啃完吧 C语言好久不用 快忘光了 分析源码的第一步 先别急
  • 调用bat执行planning规则/规则集

    示例 c cd C Oracle Middleware user projects epmsystem1 Planning Planning1 echo begin run 规则集测试 echo 规则集测试开始时间 DATE time gt
  • Matterport3D:室内环境RGB-D数据的深度学习

    Matterport3D 室内环境RGB D数据的深度学习 Taylor Guo 2017年9月24日 Matterport3D Learning from RGB D Data in Indoor Environments Matterp
  • Java中的常量和类常量有什么区别?

    Java中的常量和类常量有什么区别 常量是在程序中固定不变的值 而类常量是属于类的特定常量 它们在Java中有一些区别 常量 Constants 是指在程序中定义的一些不可改变的值 它们通常用关键字final来声明 并且在声明时必须进行初始
  • 还在一张张的保存图集?教你用27行代码一件获取

    嗨嗨 你们好 对于一张一张的保存图片太麻烦了 教你如何利用python一件获取写真图集 只需要27行代码 来吧 先准备一下 首先我们需要自己安装一下这两个第三方模块 requests gt gt gt pip install request
  • Pandas 获取 Dataframe 总的行数 和 列数

    Pandas 获取 DataFam 总的行数 和 列数 返回列数 df shape 1 返回行数 df shape 0 或者 len df
  • CentOS Linux 7.4中polkit服务启动失败

    错误描述 最近新装系统后 真机电脑需要安装ftp和chrony等软件 装包 修改配置文件后 启动服务时出现报错 Error getting authority Eroor initializing authority Error calli
  • WEB安全之XXE实体注入

    WEB安全之XXE实体注入 基础知识 什么是 XML XML代表 可扩展标记语言 XML 是一种设计用于存储和传输数据的语言 与 HTML 一样 XML 使用标记和数据的树状结构 与 HTML 不同 XML 不使用预定义的标记 因此可以为标
  • 全连接神经网络详解(Full Connect Neural Network)

    文章目录 前言 一 单层神经网络 1 1 正向传播 1 2 损失函数 1 3 梯度下降 二 浅层神经网络 2 1 正向传播 2 2 反向传播 三 深层神经网络 3 1 ImageNet发展史 3 2 网络参数 总结及展望 前言 深度学习最基