β的深度学习笔记(一)   前馈神经网络

举报
AAAI 发表于 2020/12/28 00:06:19 2020/12/28
【摘要】                                             前馈神经网络 首先我先寻找了知乎中的一个介绍进行学习:https://www.zhihu.com/question/22553761/answer/126474394 来自知乎学者YJango的回答:https://www.zhihu.com/people/YJango,以及其它...

                                            前馈神经网络

首先我先寻找了知乎中的一个介绍进行学习:https://www.zhihu.com/question/22553761/answer/126474394

来自知乎学者YJango的回答:https://www.zhihu.com/people/YJango,以及其它文章,如果有侵权可以联系删除。

前馈神经网络是在输入层和输出层之间还存在一些线性模型,并且在这两个线性模型后都加入一个ReLU的非线性函数(又叫激活函数,保持小于0,则输出0),称为隐藏层(hidden layers),隐藏层可以增加很多个(线性模型+非线性函数)的组合。隐藏层的维度和层数可以任意选择,越多则拟合能力越强。再最后输出到输出层(将维度调整到输出维度,也可以加非线性函数)。

基础:

每层神经网络的数学理解:用线性变换跟随着非线性变化,将输入空间投向另一个空间

每层神经网络的物理理解:通过现有的不同物质的组合形成新物质

线性可分视角:神经网络的学习就是学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。 增加节点数:增加维度,即增加线性转换能力。 增加层数:增加激活函数的次数,即增加非线性转换次数。

特别说明:二维情景:平面的四个象限也是线性可分。但下图的红蓝两条线就无法找到一超平面去分割。

神经网络的解决方法依旧是转换到另外一个空间下,用的是所说的5种空间变换操作。比如下图就是经过放大、平移、旋转、扭曲原二维空间后,在三维空间下就可以成功找到一个超平面分割红蓝两线 (同SVM的思路一样)。

我的理解是:在线性分割时,有时候我们找不到一个超平面去分割,所以需要不断的改变(进行一层的转换)形成一个新的空间,再进行直接的分割。

在自然界是有分子组成舞台,所以我们可以进行图像识别或者人脸识别,由像素组成菱角再组成五官最后到不同的人脸。每一层代表不同的不同的物质层面 (如分子层)。而每层的W存储着如何组合上一层的物质从而形成新物质

preview

物质组成视角:神经网络的学习过程就是学习物质组成方式的过程。增加节点数:增加同一层物质的种类,比如118个元素的原子层就有118个节点。 增加层数:增加更多层级,比如分子层,原子层,器官层,并通过判断更抽象的概念来识别物体。

神经网络的训练

知道了神经网络的学习过程就是学习控制着空间变换方式(物质组成方式)的权重矩阵后,接下来的问题就是如何学习每一层的权重矩阵W。

我们要我们的输出要接近预测值,就可以通过比较当前网络的预测值和我们真正想要的目标值,再根据两者的差异情况来更新每一层的权重矩阵(比如,如果网络的预测值高了,就调整权重让它预测低一些,不断调整,直到能够预测出目标值)。因此就需要先定义“如何比较预测值和目标值的差异”,这便是损失函数或目标函数(loss function or objective function),用于衡量预测值和目标值的差异的方程。

所用的方法是梯度下降(Gradient descent):通过使loss值向当前点对应梯度的反方向不断移动,来降低loss。一次移动多少是由学习速率(learning rate)来控制的。

但梯度下降有两个难题:局部极小值和梯度的计算。

在局部极小值时我们要跳出这个区域,从而得到一个全局最优值。所提出的方法有:调节步伐:调节学习速率,使每一次的更新“步伐”不同。优化起点:合理初始化权重(weights initialization)、预训练网络(pre-train),使网络获得一个较好的“起始点”。【由于本人研究课题为进化算法与深度学习的应用,所以我认为可以使用优秀的优化算法进行优化权重,当然这个方面已经有很多人做过了】

梯度的计算:该如何快速计算梯度?如何更新隐藏层的权重?

解决方法是:计算图:反向传播算法。【有的优化算法是和反向传播算法进行结合,来提高梯度的计算速度:文章题目

Evolving Deep Neural Networks via Cooperative Coevolution With Backpropagation 
 
反向传播算法是求梯度的一种方法。如同快速傅里叶变换(FFT)的贡献。而计算图的概念又使梯度的计算更加合理方便。
 
流程图:
preview
 
 
收集训练集(train data):也就是同时有input以及对应label的数据。每个数据叫做训练样本(sample)。label也叫target,也是机器学习中最贵的部分。上图表示的是我的数据库。假设input本别是x的维度是39,label的维度是48。
设计网络结构(architecture):确定层数、每一隐藏层的节点数和激活函数,以及输出层的激活函数和损失函数。上图用的是两层隐藏层(最后一层是输出层)。隐藏层所用激活函数a( )是ReLu,输出层的激活函数是线性linear(也可看成是没有激活函数)。隐藏层都是1000节点。损失函数L( )是用于比较距离MSE:mean((output - target)^2)。MSE越小表示预测效果越好。训练过程就是不断减小MSE的过程。
数据预处理(preprocessing):将所有样本的input和label处理成能够使用神经网络的数据,label的值域符合激活函数的值域。并简单优化数据以便让训练易于收敛。比如中心化(mean subtraction)、归一化(normlization)、主成分分析(PCA)、白化(whitening)。
权重初始化(weights initialization):W在训练前不能为空,要初始化才能够计算loss从而来降低。
训练网络(training):训练过程就是用训练数据的input经过网络计算出output,再和label计算出loss,再计算出gradients(梯度)来更新weights的过程。
 
这里就把这篇回答看完了,有了一些了解,但还需要动手实践。
 
 

文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_38022166/article/details/106098671

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。