在之前的文章里面,我介绍了机器学习的很多经典算法,其中有一个叫做『神经网络』的算法目前最受追捧,因为击败李世石的阿尔法狗所用到的算法实际上就是基于神经网络的深度学习算法。由于其算法结构类似于人脑神经结构,所以人们对他给予了厚望,希望通过神经网络算法实现真正的AI。
神经网络(Neural Network(NN))
一个典型的神经网络如下图
其最基本的神经元是由一个线性函数和一个非线性的激活函数组成:
这个线性函数与之前线性回归是一样的,而激活函数可以理解为将输出的结果进行调控,比如使其保证在0和1之间。
与线性回归一样,神经网络实际上就是要训练找到合适的w 和 b。与线性回归一样,使用梯度下降(Grident Dscent)法,即可得到最优 的w和b。
非线性的激活函数有很多类,如图:
Sigmoid 是早期比较流行的,不过现在用的最多的是ReLu,为什么简单的Relu能够比看起来更加合理的Sigmoid 更加有效,并不是这篇笔记要探讨的话题。至于为什么要用激活函数,我想也很好理解,如果整个神经网络全是线性的话,那么无论这个网络有多复杂,最终都只是一个线性的,然而我们这个世界上的事物用线性模型就都能解释吗,显然不行。
深度神经网络(Deep Neural Network (DNN))
深度神经网络实际上就是将神经网络进行叠加,而中间层叫做隐藏层(Hiden layer), 隐藏层能够分辨出浅层神经网络无法分辨的细节。
前向传播和反向传播(Forward and Backward propagation)
前向传播其实很简单,就是如何堆砌这个神经网络,多少个Feature 输入,多少层神经网络,每层多少个神经元,每一层用什么激活函数。
最困难的是反向传播,类似于线性回归一样,我们的目的是要用合适的参数(W和b)使这个网络,或者说整个模型预测的值最接近真实的数值,换句话说就是预测值与真实值的差距最小。这个求这个差值的函数我们叫代价函数(Cost Function), 而反向传播就是通过预测结果,向前倒推每一层W和b的导数。通过这个导数我们就可以用梯度下降的方法训练出代价函数最小的W和b值。
反向传播涉及到了微分,和偏微分(偏导)递归等数学原理,虽然也不难,但是也并不在本文的讨论范围之内。不过好消息是在现在流行的深度学习工具中,比如在Tensorflow中, 我们只需要关心如何搭建这个网络(前向传播),工具会自动通过反向传播计算最优解,所以这部分我想留在后续Tensorflow 的文章中详细讲解。
其实听起来高大上的NN和DNN是不是很简单。
相关文章
AI 学习笔记之——监督学习一朴素贝叶斯(Supervised Learning)
首发steemit
欢迎扫描二维码关注我的微信公众号“tensorflow机器学习”,一起学习,共同进步