全连接神经网络详解(Full Connect Neural Network)
文章目录
- 前言
- 一、单层神经网络
- 1.1 正向传播
- 1.2 损失函数
- 1.3 梯度下降
- 二、浅层神经网络
- 2.1 正向传播
- 2.2 反向传播
- 三、深层神经网络
- 3.1 ImageNet发展史
- 3.2 网络参数
- 总结及展望
前言
深度学习最基础的网络类型的之一,全连接神经网络(Full Connect Neural Network)是大多数入门深度学习领域的初学者必学的内容,充分体现深度学习方法相比于传统机器学习算法的特点,即大数据驱动、去公式推导、自我迭代更新、黑匣子训练等。
本文介绍单层神经网络、浅层神经网络和深层神经网络,循序渐进地加深对于深度学习基本概念的理解。需要注意的是所有代码基于飞桨PaddlePaddle架构实现。
一、单层神经网络
Logistic回归模型是最简单的单层网络,常被用来处理二分类问题,它使一种用于分析各种影响因素(x1,x2,…,xn)(x_1,x_2,…,x_n)(x1,x2,…,xn)与分类结果yyy之间的有监督学习方法。
1.1 正向传播
此计算过程等同于线性回归计算,即给每一个输入向量x分配权值,计算出一个结果向量z。同时,为了使神经网络具有非线性特点,引入激活函数来处理线性变换得到的数值。
- 线性变换(加权和偏置):z=wTx+bz=w^Tx+bz=wTx+b
- 非线性变换(激活函数):δ(x)=11+e−z\delta (x) = \frac{1}{{1 + {e^{ - z}}}}δ(x)=1+e−z1
上式中www为权值,bbb为偏置,xxx为输入值,zzz为线性输出值,δ\deltaδ为非线性输出值。
1.2 损失函数
模型需要定义损失函数来对参数www和bbb进行优化,损失函数的选择需要具体问题具体分析,以下为两种常见损失函数计算公式。
- 平方损失函数:L(y^,y)=12(y^−y)2L(\hat y,y) = \frac{1}{2}{(\hat y - y)^2}L(y^,y)=21(y^−y)2
- 对数似然损失函数:L(y^,y)=−[ylogy^+(1−y)log(1−y^)]L(\hat y,y) = - [y\log \hat y + (1 - y)\log (1 - \hat y)]L(y^,y)=−[ylogy^+(1−y)log(1−y^)]
上式中y^\hat yy^为计算结果,yyy为实际结果
1.3 梯度下降
梯度下降是一种前反馈计算方法,反映的是一种“以误差来修正误差”的思想,亦是神经网络进行迭代更新的核心过程。
- 迭代更新:ω=ω−αdL(ω)dω\omega = \omega - \alpha \frac{{dL(\omega )}}{{d\omega }}ω=ω−αdωdL(ω)
- 链式法则:dL(a,y)dω=dL(a,y)da⋅dadz⋅dzdω\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)⋅dzda⋅dωdz
单层网络的代码(Numpy实现和飞桨实现)
二、浅层神经网络
浅层神经网络相比单层网络的差别在于隐藏层有多个神经节点,这就使得其可以处理“多输入多输出”的复杂问题。每一层的每一个节点都与上下层节点全部连接,这种神经网络称作全连接网络。
2.1 正向传播
z[1]=(z1[1]z2[1]z3[1])=(w1(1]T⋅x+b1(1)w2[1]T⋅x+b2[1]w3[1]T⋅x+b3[1])=(w1[1]T⋅xw2[1]T⋅xw3(1]T⋅x)+b[1]=W[1]x+b[1]a[1]=(a1[1]a2[1]a3[1])=(t(z1(1])t(z2(1])t(z3[1]))=t(z1[1]z2[1]z3[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]T⋅x+b1(1)w2[1]T⋅x+b2[1]w3[1]T⋅x+b3[1]⎠⎟⎞=⎝⎜⎛w1[1]T⋅xw2[1]T⋅xw3(1]T⋅x⎠⎟⎞+b[1]=W[1]x+b[1]a[1]=⎝⎜⎛a1[1]a2[1]a3[1]⎠⎟⎞=⎝⎜⎜⎜⎛t(z1(1])t(z2(1])t(z3[1])⎠⎟⎟⎟⎞=t⎝⎜⎛z1[1]z2[1]z3[1]⎠⎟⎞=t(z[1])
- 上角标中括号用于区分不同层
- 下角标数字表示神经元节点的映射关系
- 一个神经元节点包含上一层节点数ωxω_xωx和bxb_xbx和下一层节点数zyz_yzy
2.2 反向传播
- 梯度下降法
W=W−α∂L∂Wb=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−α∂W∂L=b−α∂b∂L - 向量表达式
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]]\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最优解,
- 骨干网络:网络应该设置多少层,每一层应该有多少个节点,从来没有一套标准的设计模板,毫无方向的在不断测试中摸索前进。
全连接神经网络详解(Full Connect Neural Network)相关推荐
- 神经网络全连接层详解
全连接层即:每一个节点都与上一层的节点相连,每个节点都视为一个特征点,当产生一个输入源后会对全连接层做卷积操作,卷积核多大取决于你的全连接层每层数据表有多大,全连接层里每一层都是一组数据,这组数据里包 ...
- 全连接神经网络实现MNIST手写数字识别
在对全连接神经网络的基本知识(全连接神经网络详解)学习之后,通过MNIST手写数字识别这个小项目来学习如何实现全连接神经网络. MNIST数据集 对于深度学习的任何项目来说,数据集是其中最为关键的部分 ...
- [转载] python bp神经网络 mnist_Python利用全连接神经网络求解MNIST问题详解
参考链接: Python中的单个神经元神经网络 本文实例讲述了Python利用全连接神经网络求解MNIST问题.分享给大家供大家参考,具体如下: 1.单隐藏层神经网络 人类的神经元在树突接受刺激信息后 ...
- 全连接神经网络反向传播详解
训练神经网络基本采用反向传播+梯度下降来进行,具体过程如下: 全连接层神经元之间互相连接,假设第一层有三个节点,第二层有个节点,如下图所示: 我们通过w11,w12,w21,w22,w31,w32来分 ...
- 全连接神经网络(FCNN)
全连接神经网络(Fully Connected Neural Network),CNN.RNN.LSTM等各种神经网络都是基于全连接神经网络出发的,最基础的原理都是由反向传播而来. 1.全连接神经网络 ...
- 【TensorFlow】TensorFlow从浅入深系列之十 -- 教你认识卷积神经网络的基本网路结构及其与全连接神经网络的差异
本文是<TensorFlow从浅入深>系列之第10篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...
- 全连接神经网络、卷积神经网络
全连接神经网络.卷积神经网络 前言 全连接神经网络 介绍 结构 损失函数 梯度下降 链式法则 反向传播 总结 卷积神经网络 背景 结构 卷积(Convolution) 池化(Max Pooling) ...
- 全连接神经网络(DNN)
最近想要学习深度学习模型,没有一上来就先学习CNN.RNN.LSTM,而是先学习全连接神经网络(Fully Connected Neural Network),原因非常简单,上述所说的各种神经网络都是 ...
- 深蓝学院第二章:基于全连接神经网络(FCNN)的手写数字识别
如何用全连接神经网络去做手写识别??? 使用的是jupyter notebook这个插件进行代码演示.(首先先装一个Anaconda的虚拟环境,然后自己构建一个自己的虚拟环境,然后在虚拟环境中安装ju ...
最新文章
- [bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划
- R语言构建xgboost模型:基于稀疏数据(dgCMatrix which is a sparse matrix)、稠密数据(dense matrix)、xgb.DMatrix数据聚合
- gridView总结
- python爬虫编程100例_哪种Python程序员最赚钱?爬虫数据告诉你!
- 看到了商机,为什么赚不到钱?
- 杭电1241java实现dfs
- 推荐优秀的SQL脚本调试工具Embarcadero DBArtisan 可以调试SQL Server 2000/2005 SQL调试工具汇总...
- java中 immutable,future,nio
- 【VS C++ 2010】查看内存的方法详解
- JAVA-初步认识-第十四章-多线程(面试题)
- 关于axios+spring boot无法进行重定向的问题
- Mysql添加用户错误:ERROR 1364 (HY000): Field ‘ssl_cipher‘ doesn‘t have a default value解决方法
- Linux磁盘设备文件(sda,sdb,sdc…)变化问题
- 透过 ASP.NET 和数据库读写图片
- xp sp3不让dword shoot
- ROP攻击:Challenge 0x14: Horcruxes
- 一位大学教授的感叹:一流大学的真实样子!
- WAP/WEB网站建设
- 联想 ThinkBook 15 LLI 蓝屏恢复
- 微型计算机nuc 6i5syk,Intel Skylake NUC迷你机性能实测:15W的神器
热门文章
- SOLIDWORKS Flow Simulation卡门涡街模拟
- uni-app使用picker底部弹起的滚动选择器(日期选择器)
- 按关键字搜索商品 (淘宝)
- 算法设计与分析:动态规划(3)-序列联配问题(以算代存)
- 国产Linux系统deepin使用感受
- 人工智能肺炎图像识别模型-企业模型_科研机构应用
- python的枚举和for循环_python 基础4 分支、循环、条件与枚举
- matlab巴克码发生器,2018年移动通信课程设计题目.doc
- 经纬财富:六安何克服操盘时的恐惧心理?
- wireshark抓包红色_wireshark怎么抓包、wireshark抓包详细图文教程