人工智能-深度学习笔记2 猫和非猫引起的二分类-续

在学习神经网络基础知识时,需要注意的是,去实现一个神经网络时,是需要知道一些非常重要的技术和技巧的:例如数据集,该如何表示和处理呢?;选用什么的算法方式呢,激活函数的确定;成本函数和代价函数怎么确定?;多少也得知道前向传播和反向传播的过程以及会产生怎样的结果吧。

在上一篇的学习笔记中,进行到了代价函数的设计技巧,接下来就是通过让代价达到最小来进行神经网络的训练,下面就看看神经网络是怎么做的?

 

1、梯度下降法(Gradient Descent)

人工智能-深度学习笔记2 猫和非猫引起的二分类-续_第1张图片

上图是逻辑回归算法的代价函数(成本函数),在训练数据集上,是需要通过最小化代价函数(成本函数) J(w,b) 来训练参数w和b的,那么梯度下降法在此处可以做什么呢?

人工智能-深度学习笔记2 猫和非猫引起的二分类-续_第2张图片

在上图中,横轴表示空间参数w 和 b ,在实践中,w可以是更高的维度,但是为了更好地绘图,这里定义 w 和b都是单一实数,代价函数(成本函数)J(w,b)是在水平轴w和b上的曲面,因此曲面的高度就是 J(w,b)在某一点的函数值,如上图1。目前所要做的就是找到使得代价函数(成本函数)J(w,b)函数值是最小值时对应的参数w 和b 。如上图2,代价函数(成本函数) J(w,b) 是一个凸函数(convex function),像一个大碗一样。但若如图,这就与图2有些相反,因为它是非凸的并且有很多不同的局部最小值。由于逻辑回归的代价函数(成本函数) J(w,b) 特性,必须定义代价函数(成本函数) J(w,b) 为凸函数

初始化w和b ,可以用如上图5那个小红点来初始化参数w和b ,也可以采用随机初始化的方法,对于逻辑回归几乎所有的初始化方法都有效,因为函数是凸函数,无论在哪里初始化,都应该达到同一点或大致相同的点如图4。假设以如图5的小红点的坐标来初始化参数w和 b。朝最陡的下坡方向走一步如上图6,不断地迭代,继续朝最陡的下坡方向再走一步,如图7,经过两次迭代走到第三个小红点处。直到走到全局最优解或者接近全局最优解的地方如图4。通过以上的三个步骤是可以找到全局最优解的,也就是代价函数(成本函数) 这个凸函数的最小值点。

接下来,又要进行符号上的说明了,用数学描述下上面的步骤:这里涉及了微积分,可以先熟悉下咱们学过的导数概念,再符号描述完后,会接着对导数做进一步的学习的。

人工智能-深度学习笔记2 猫和非猫引起的二分类-续_第3张图片

此处先假定代价函数(成本函数)J(w)只有一个参数w,即用一维曲线来解释下符号(大家还记得斜率么?)。其实迭代就是不断重复做如上图右边的公式:

: 表示更新参数

a 表示学习率(learning rate),用来控制步长(step),即向下走一步的长度

就是函数J(w)对 w求导(derivative),在代码中经常会使用dw表示这个结果。

 

人工智能-深度学习笔记2 猫和非猫引起的二分类-续_第4张图片

对于导数更加形象化的理解就是斜率(slope),如上图左该点的导数就是这个点相切于J(w)的小三角形的高除宽。假设以如图左的点为初始化点,该点处的斜率的符号是正的,即上图中。接下来会向左走一步,整个梯度下降法的迭代过程就是不断地向左走,直至逼近最小值点。

人工智能-深度学习笔记2 猫和非猫引起的二分类-续_第5张图片

假设以如图左的点为初始化点,该点处的斜率的符号是负的,即上图中。接下来会向右走一步,整个梯度下降法的迭代过程就是不断地向右走,即朝着最小值点方向走。

逻辑回归的代价函数(成本函数)J(w,b) 是含有两个参数的:\small \partial表示求偏导符号,可以读作round

 

图左就是函数J(w,b)对w求偏导,在代码中经常会使用dw表示这个结果。图右就是函数J(w,b)对b求偏导,在代码中经常会使用 db表示这个结果。小写字母d 用在求导数(derivative),即函数只有一个参数, 偏导数符号\small \partial用在求偏导(partial derivative),即函数含有两个以上的参数。

 

 

2、微积分和导数

为了高效应用神经网络和深度学习,还是需要来理解下微积分的数学知识的,在后面的学习中,将会看到定义的很多种类的函数,通过微积分可以把所有的知识结合起来,其中有的叫做前向函数和反向函数,这个在下篇的学习笔记中来描述。进一步的了解微积分的细节,直观地认识微积分,便于用来构建和成功的应用这些算法。

人工智能-深度学习笔记2 猫和非猫引起的二分类-续_第6张图片

一个函数f(a) = 3a ,它是一条直线(这个是线性的),下面来看看导数是个什么样子的函数:

先看看函数中几个点,假定 a =2,那么f(a)是a 的3倍等于6,也就是说如果a =2 ,那么函数f(a) =6 。假定稍微改变一点点a的值,只增加一点,变为2.001,这时a将向右做微小的移动。0.001的差别实在是太小了,不能在图中显示出来,把它右移一点,现在 f(a) 等于a 的3倍是6.003,画在上图里(比例不太符合)。注意这个小三角形,如果向右移动0.001,那么 f(a) 增加0.003,f(a)的值增加3倍于右移的a,因此可以当a=2 时,斜率是3。导数这个概念意味着斜率,斜率以一种很友好的方式来描述导数这个概念的。所以提到导数,把它当作函数的斜率就好了。更正式的斜率定义为在上图这个小三角形中,高除以宽。即斜率等于0.003除以0.001,等于3。或者说导数等于3,这表示当你将 右移0.001, f(a) 的值增加3倍水平方向的量。

人工智能-深度学习笔记2 猫和非猫引起的二分类-续_第7张图片

再来细致的理解下这个函数,假设a=5,此时f(a)=3a=15,把a右移一个很小的幅度,增加到5.001,f(a)=15.003 , 即在 a=5 时,斜率是3,这就是表示,当微小改变变量a 的值如上图左上的表示。一个等价的导数表达式可以这样写如上图左下的表示,不管你是否将 f(a) 放在上面或者放在右边都没有关系。

以上对导数讨论的情况是将a偏移0.001,实际导数的数学定义,是右移很小的a值(不是0.001,而是一个非常非常小的值,趋于0)。通常导数的定义是右移a(可度量的值)一个无限小的值, f(a) 增加3倍(增加了一个非常非常小的值)。也就是这个三角形右边的高度。这就是就是导数的正式定义。

为了直观的认识,仅仅探讨右移 a=0.001 这个值,即使0.001并不是无穷小的可测数据。导数的一个特性是:这个函数任何地方的斜率总是等于3,不管a=2 或a=5 ,这个函数的斜率总等于3,也就是说不管a的值如何变化,如果a增加0.001, f(a) 的值就增加3倍。一种证明方式是无论将小三角形画在哪里,它的高除以宽总是3。

上面说了一条直线,曲线的导数呢?

人工智能-深度学习笔记2 猫和非猫引起的二分类-续_第8张图片

这个函数大家不陌生吧,当然这里只描述了一半,另一半的情况自行思考哈。

f(a)=a^2,如果a=2 的话,那么f(a)=4。稍稍往右推进一点点,现在a=2.001 ,则f(a)≈4.004 ,如果在这儿点附近画一个小三角形就会发现,如果把a往右移动0.001,那么f(a)将增大四倍,即增大0.004。在微积分中把这个三角形斜边的斜率,称为f(a)在点a=2 处的导数(即为4),或者写成微积分的形式,当a=2 的时候,

 

由此可知,函数f(a)=a^2,在a取不同值的时候,它的斜率是不同的。直观的方法解释:如果在曲线上的不同位置画一些小小的三角形就会发现,三角形高和宽的比值,在曲线上不同的地方,它们是不同的。所以当a=2 时,斜率为4;而当a=5时,斜率为10 。微积分的课本说明,函数f(a)=a^2的斜率(即导数)为2a。这意味着任意给定一点a,如果你稍微将a,增大0.001,那么你会看到f(a)将增大2a,即增大的值为点在a处斜率或导数,乘以你向右移动的距离。现在有个小细节需要注意,导数增大的值,不是刚好等于导数公式算出来的值,而只是根据导数算出来的一个估计值。

接着再来看看数学课本上的公式吧:

设函数y=f(x)在点x0的某个邻域内有定义,当自变量x在x0处有增量Δx,(x0+Δx)也在该邻域内时,相应地函数取得增量Δy=f(x0+Δx)-f(x0);如果Δy与Δx之比当Δx→0时极限存在,则称函数y=f(x)在点x0处可导,并称这个极限为函数y=f(x)在点x0处的导数记作

, 即

函数y=f(x)在x0点的导数 f'(x0)的几何意义:表示函数曲线在点P0(x0,f(x0))处的切线的斜率(导数的几何意义是该函数曲线在这一点上的切线斜率)。

 

学到这里,似乎还没有将逻辑回归中梯度下降的微积分说明啊?这里就是关于偏导的数学知识了。在一元函数中,导数就是函数的变化率。二元函数的变化率又是怎么样的呢?大家可以将一元函数当成线来研究,那么,二元函数就当做面来看就可以了。这就是偏导的几何意义了:表示固定面上一点的切线斜率,反映的是函数沿坐标轴正方向的变化率。需要注意的是,若函数连续时,求导的结果与二元因变量先后次序无关。

 

你可能感兴趣的:(MachineLearning,DeepLearning)