零基础入门神经网络是如何学习的
最近人工智能越来越火,而深度学习是人工智能领域的重中之重。
那么什么是机器学习呢?
机器学习:计算机像人一样学习

那么机器是如何像人一样学习呢?
大家小时候应该见过这个图

一个人成长的过程就是不断犯错的过程,犯错了不要紧,只要改正过来了同样是好孩子。
机器同样,你要让机器学习就是让机器不断纠正自己的错误,最终达到目的。
那么神经网络如何进行机器学习的?

深度学习的过程
1、输入(input) 的内容 经过 前向传播(forward propagation) 获得输出(output)
2、输出(output) 通过反向传播(back propagation) 获得误差,然后进行纠正。
循环N次,最终获得一个好的学习成绩。
那么问题来了,我么需要纠正的究竟是什么?
我们先看一下神经网络的简单模型。
这个神经网络:让机器学会辨认这图是猫还是狗?

其中:
y1 = x1*w11*W11 + x1*w12*W21 + x1*w13*W31 + x2*w21*W11+ x2*w22*W21 + x2*w23*W31
y2 = x1*w11*W12 + x1*w12*W22 + x1*w13*W32 + x2*w21*W12+ x2*w22*W22 + x2*w23*W32
y1和y2就是我们最终应该输出的结果。
[x1,x2]我们要看成一个整体,就是输入的图片
我们需要更新的就是神经网络中的权重(w)。这里的w可能为正数,也可能为负数。
通过不断的前向传播和反向传播,不断的纠正,最终获得一个不错的值。
那么我们需要解决如下几个问题。
问题1:w的初始值为多少?
w的初始值是一组随机的数,w的范围为(-1,1)
问题2:如何怎么知道我们究竟错误了多少?
就像我们看到这么一张图

如果机器认为是狗,那么他的错误不大(因为狼是犬科动物)
如果机器认为是猫,那么这个错误就大了。
问题3:我们如何量化我们的错误值?
这里就要引入一个概念。损失函数
损失函数的作用就是为了计算我们的损失值(loss)
损失函数有哪些?
1、softmax分类器
2、交叉熵损失函数(cross-entropy loss)
3、SVM损失函数
损失函数有很多,具体的计算过程这边就不多赘述了。
问题4:什么是激活函数(active function)?
没有激活函数的世界是怎样的?

没有激活函数的世界只有直线,不会拐弯,不撞南墙不回头。
这个时候激活函数就横空出世了

激活函数让线性变得非线性,激活了神经网络的活力
激活函数有哪些
1、sigmoid函数
2、tanh函数
3、ReLu函数
问题5:反向传播(back propagation)究竟是怎样的?
反向传播是深度学习重要的环节之一,他也是深度学习的一个难点
反向传播的目的就是为了让损失值下降到最低点。但是我们如何能够下降到最低点。

如何让这个人下降到最低点?

就是根据当前的导数来进行下降的。
所以就要引入一个重要概念:梯度下降
梯度下降就是让这个人下降到最低点,达到最优值。
那么我们如何计算出下降导数呢?

再看上面这个图,这个时候我们就应该用到我们的高数知识了。
多元函数链式求导法则

具体是怎么计算的这里就不多做赘述了,大家可以看高数知识。
想要知道x1对损失值(loss)的影响情况,就通过以上这个公式就可以计算出导数
最后:我们再次总结深度学习的过程

机器学习的过程
1、初始化w的值
2、输入(input) 经过 隐藏层 获得输出(output)
3、输出经过 损失函数(loss function) 获得损失值
4、通过偏导数,计算得到输入对损失(loss) 的影响大小,进行改正
循环N次,最终获得一个好的学习成绩。