一个神经网络会有很多层,每层会有多个神经元
每个神经元一遍会有一个线性模型和一个激活函数组成
那么他们是怎么工作的呢
从简单的开始,假设我们有一组数据,x是时间,y是速度,这辆车一直在加速,我们想要预测后面某一直时间的车速
假设,y=wx+b,我们想要知道w和b的值,这样我们就知道后面时间的速度了,怎么根据现在已经有的一组数据尽可能准的给一个w和b的值呢
方法就是我们给定这个w和b的值后,利用这两个值预测出来的结果要和,统计到的结果越接近越好,也就是loss要越低越好
可以看出我们这里的loss是一个二次函数,二元二次函数,怎么办呢,我们先来点简单的
牛顿法
我们想要一个x的值,值得到y的最小值,用公式我们很快就能实现
也就是找到最底下的那个点,那不用公司呢?
我们随便取一个点,然后取这个点的切线,然后通过这个切线往底部平移一段,作为一个新的点,一点点往下移,知道那个我们想要的点
好回来,我们的二元二次方程
他的图是一个三位的锅的形状,我们要做的就是不断移动w和b的值最后找到锅底,
原理类似前面的牛顿法,这里我们叫梯度下降法
我们要做的就是随机选一个点,然后计算获得下一个点的位置,这样一步一步往下移
我们的例子是二维的,其实和唯独没有关系,我们只要每个纬度乘以各自唯独的偏导数就可以,这里每次移动的距离,也就是偏导数要乘的数据,我们叫他步长
偏导数,也就是斜率,我们可以通过取极值的方式来获取,只要越小我们计算得到的斜率就约准确
模型是线性的,我们加入激活函数引入非线性因素
其他的继续,每个纬度继续移动找碗底,乘了一个激活函数也不要担心,偏倒数也是可以相乘的
每次计算往下滑一点,每次计算往下滑一点,步长不能太大,太大级越过了锅底,我们称为梯度爆炸,太小我们有需要娜很久才能挪到锅底,所以我们需要调整步长也就是学习率到一个合适的位置
然后呢,每一个样本我们都会这样取计算一次loss,所以一步我们的批次不会取得很大,如果10000个样本,我们就要算一万个样本的loss,要很久,我们一步会给分批次,每次几百左右,至少显得出一个局部最优解
我这里呢还有几个盲区,记录一下,1.为什么模型是线性的,不可以非线性嘛?为什么是一次方程不是二次三次四次, 我猜应该是可以的非线性的,也可以二次三次四次什么的,移位最后算方差loss的时候,都是一个倒的山头形状,只是如果我们用的模型次数越高,那个倒山头就约尖约抖,都是形状都是那样的,所以取一次是最合适的,
2.为什么我们要加入激活函数,我知道加入了激活函数是为了映入非线性,让模型和结果有更多的可能,那这个激活函数那么多,我们该怎么来选呢?
原文:白话深度学习