| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 全连接神经网络 -> 正文阅读 |
|
[人工智能]全连接神经网络 |
注:本文是关于北京邮电大学鲁鹏老师计算机视觉与深度学习课程全连接神经网络部分内容的笔记与一些个人理解。 全连接神经网络全连接神经网络模型两层全连接神经网络模型如下: 全连接神经网络可以用来解决线性不可分平面的分类问题。 全连接神经网络的表示方法: 如图为一个两层全连接神经网络的表示,两层就是除输入层还剩下两层。输入层就表示为我们输入的图像,输入层的维度也就是输入图像的维度,也就有d个神经元。中间的隐层就相当于 W 1 × x W_1 \times x W1?×x后的结果,其神经元的个数就是我们指定的模板的个数也就是 W 1 W_1 W1??的行数。最后是输出层,其神经元的个数就是类别数。其输入层到隐层的边,就相当于 W 1 W_1 W1?,x经过与 W 1 W_1 W1?相乘的运算后得到隐层,如图可知,上一层的每一个神经元与下一层的每一个神经元都有连接,因此被称为全连接神经网络。 注意在全连接神经网络的模型中我们必须要激活函数,比如下面是一个三层全连接神经网络的模型: 常用的激活函数Sigmoid: tanh: ReLU: Leaky ReLU: 在选择激活函数时尽量选择ReLU函数或Leakly ReLU函数,相对于Sigmoid和tanh,ReLU和Leakly ReLU函数会让梯度流更加顺畅,训练过程收敛得更快。 网络结构设计关于要用多少个隐层,每个隐层要设置多少个神经元,并没有一个统一的答案。依据分类任务的难易程度来调整神经网络模型的复杂程度。分类任务越难,我们设计的神经网络结构就应该越深,越宽。但是,需要注意的是对训练集分类精度最高的全连接神经网络模型,在真实场景下识别性能未必是最好的(过拟合)。 由图可知神经元个数越多,分界面就可以越复杂,在这个集合上的分类能力就越强。 SOFTMAX? 在计算出输出层的得分后,我们可以通过softmax操作将得到的分数转换成概率分布。 如图所示,先将得到的分数取e的指数得到t,再计算出t的概率,就得到了进过softmax操作后新的输出层,表示为概率。 交叉熵损失?在通过softmax操作后,我们要如何计算损失呢,如图。 在softmax操作后计算损失就是要计算分类器预测分布于真实分布的距离,就要用到交叉熵。 交叉熵损失与多类支持向量机损失比较观察第二行数据,多类计算出来的损失为0,而交叉计算出来的损失为0.2差距有点大,为什么呢,因为根据多类的规则只要真实的分数比其他的分数都大于1就认为损失为0,在第二行中10恰好比其他分数都大1,因此多类计算出来的损失为0,而对于交叉来说,是根据概率分布来计算损失的,而10在所有分数中占的比重就比0.3大一点,计算出来的损失自然比0要大一些。因此可以看出交叉熵不仅仅要求真实标签对应的分数要是最大的还要求其对应的分数占的比重要大,也就是其他的分数要小。 计算图与反向传播? 计算图是一种有向图,它用来表达输入,输出以及中间变量之间的计算关系,图中的每个节点对应着一种数学运算。 所谓反向传播就是从后往前计算局部梯度,并利用链式法则一步步计算出最终的梯度。例如。 梯度算法的改进? 梯度下降算法容易在山壁间震荡,往谷底方向的行进较慢。 动量法?利用累加历史梯度信息更新梯度 动量法有机会能摆脱局部最小点和鞍点,达到全局最小点。 自适应梯度与RMSProp? 自适应梯度法通过减小震荡方向的歩长,增大平坦方向歩长来减小震荡,加速通往谷底的方向。那么就要区分震荡方向与平坦方向,我们认为梯度幅度的平方较大的方向是震荡方向,梯度幅度的平方较小的方向是平坦方向。 AdaGradAdaGrad是一种自适应的梯度算法。如果是震荡方向,那么梯度的平方就会较大,对应的r就会大,因此学习率就会小,歩长也就小了,反之同理。但是这个算法也存在一个缺点,因为r是一直在累加,会一直慢慢变大,当r越来越大,学习率就会保持很小,也就失去了对歩长的调节作。 RMSProp在AdaGrad的基础上给r设置了衰减。 ADAM?ADAM结合了动量法和自适应梯度的思想。 注意在ADAM中存在修正偏差的一个操作,这是为了解决冷启动的问题,所谓冷启动就是在算法执行的初期,v和r都是0,梯度和梯度的平方的权重都很小,那么一开始v和r一定是一个很小的值,这样的话不利于算法的启动,因此需要修正v和r,t代表迭代次数,最开始t为1,v和r都除以一个小于0的数,就会放大v和r的值,就可以让算法很快的启动起来,等迭代许多次后,t一直增大,慢慢的分母的部分就趋于1,这是修正后的v和r就接近原本的v和r。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/3 18:10:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |