Neural Network是什么,来自3B1B

【官方双语】深度学习之神经网络的结构 Part 1 ver 2.0_哔哩哔哩_bilibili

Introduction:

在这个视频中我们讲解的神经网络是非常原始的多层神经网络MLP。在这里,一个神经元就是一个圈圈,叫做Neuron,可以理解为装在一个数字的容器(目前),从(0-1)。

神经元:

拿一张图片举例,如果我们有一张28X28的灰度图,把它们拍扁就成了神经网络的第一层。

如下图所示,第一层784就是拍扁以后的,隐藏层就是拿来做训练用的。在输出的那层和第一层之间的层就是隐藏层,隐藏层的作用就是担任识别功能,这个都是训练的产物。

当你输入数字9的灰度图,那么第一层的神经元就会有不同的点亮情况,经过运算传到下一层来点亮下一层,如此传递最后输出到最后一层,最后一层是每个数字的可能性。最亮的那个就是这个神经网络的选择。 

神经元中间这些层的设置目的就是希望说它们能够对应一个个pattern,在你传递784进来的时候,例如你用了数字9,那么这两层里,数字9拥有的小特征就会点亮。把这些特征组合起来就得到了数字9,当然这只是一个比喻,方便理解,实际上神经元里不会有这么明显的pattern,大多pattern对于人来说就是nonsense,但是它就是能识别。

连结神经元:

从单独一个神经元的角度来看:

 每条线代表一个权重,如果权为正,那么为绿色,负数为红色,越接近0,颜色越淡。如果你要识别一个小段,并且还要确定旁边是否有边缘,那么你就可以给我们想要的那一段正的加权,给边缘负加权,给其他地方0加权,如果784传进来的确实是这样的pattern,那么因为我们要的地方值很高,加权就会很大,边缘的地方数据接近0,所以负加权没法影响到加权和,所以总的加权值会很大。为了控制输出的区间在0-1,我们使用Sigmoid函数将函数压缩到0-1之间:

 因此,训练神经网络就是一个确定加权的过程,为了给神经元加一个激发的阈值,我们在后面加上一个常数的bias。

 用数学表示这种关系:

把首层神经元的值写成列向量,第二层每个神经元连接的线的权重写成列向量并组成矩阵,算出来的值就会对应每个第二层未经过sigmoid和偏置的值得。

完整带偏置和函数的表达式如下:

每个神经元就像是一个函数从784-》1。

整体的神经网络就是13000-》10 

神经元中的梯度下降:

损失函数:

每个权重就像是连接的强度,阈值决定了这个神经元是否容易被激活,一开始我们初始化给的都是随机数字,所以神经网络表现会很糟,因此我们要怎么去量化这个糟糕呢?我们需要定义一个损失函数让电脑知道现在错误有多离谱。用平方和函数,并且对所有样本的平方和差做一个平均,就是损失函数。

现在我们看一下我们现在手头上有什么信息:

神经网络拿图片的灰度784作为输入,输出空间维度为10,有13002个参数

但是拿代价函数来说,它有13002个imput,输出一个总体的output cost,它的parameter是不变的,取决于神经网络的输入。那么如果要让这个代价函数最小,我们就应该利用梯度下降法一步步优化imput(这样就可以优化NN的参数)来让这个损失函数达到最小。

梯度的表示就是13002维度的,告诉了我们w要往哪里走,走多少

 因为我们使用了总体样本的差值来做损失函数,因此我们优化的结果是让整体看上去更好:

学习的本质也就出来了:

 梯度还告诉我们了一件事情,那就是标记了改变哪个参数性价比更高。如果你的梯度是[3 1]那么改变第一个变量的值能够比改变第二个值对函数的影响大很多。

 

 记得我们之前提到过的样式的识别,其实如果把权重可视化,你会发现神经网络每一个神经元识别的样式是如下图所示的,pretty random,因为它就是针对这个识别数字创造的。你给他一个马赛克他也能识别出东西来,之前的举例只是帮助更好理解:

 反向传播:

脱去了数学的反向传播原理:

  在做梯度下降的时候,我们会用到所有的样本,但是我们现在先集中看一个样本“2”在参数改变中的机制。

  在我们初始化神经网络的各个参数后,得到的结果是非常混乱的,如下图所示,我们希望预测2的神经元值能大。其他无关的预测能小。并且增加2的值比减少8的值来的重要得多,因为8已经特别接近我们想要它变成的0了。

 我们观察逻辑是 大样本→样本2→对应预测2的神经元。要增加这个神经元的激活值,我们可以用三种方法:① 增大阈值b ② 增大权重w ③ 增加前置神经元的激活值

  对于方法②。在梯度下降法中我们知道了改变某些w对函数的贡献更大。那么在这里同理,我们如果改变比较亮的神经元对应的权重,那么性价比最高,举个例子,如果你这个元很亮,然后它对应的w很小甚至是负数,那你得增加这个w一大截by倍数。这些元对2的影响最高。

    对于方法③,我们希望根据连接的强度来对前一层神经元的激活值进行调整。对于正连接的,我们希望它增大,对于负连接的,我们希望它减小。减小的幅度和增大的倍数都有w_i控制。

 现在我们得到了如果要让数字2发生我们期待的变化,我们需要的对前一层神经元的变化的需求。但是在让2这个神经元激活值增长的同时,我们还希望其它的神经元的激活值减小,那么他们对前一层神经元激活值的变化也有各自的期望,因此我们得把这些期望加起来。

 在得到对第二层的期望了以后,我们就可以把这个过程重复到第一层。对2这个样本进行一次反向传播。在这次反向传播以后,我们就会得到对于2这个样本,所有权重应该如何改变。

对所有样本都走一遍反向传播以后,我们就可以得到所有样本期望w怎么变化,把这些w加起来就可以得到不严谨意义上的梯度。在这里不严谨指的是我们不知道它如何量化这些微调并且如何把它们加起来。

  把所有的数据过一遍将会是一个非常漫长的过程,因此我们把样本打乱,分成每个mini batch 100个的集合。然后算mini patch的梯度来近似整体梯度,这就是随机梯度下降。每一步都选择一个mini batch来当下降方向。

 数学:

        写ipad上了~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值