0
点赞
收藏
分享

微信扫一扫

【Coursera-Machine Learning】自用4(未完)

云上笔记 2022-05-03 阅读 100
机器学习

前言

nothing

学而不思则罔,我™算是懂这句话的意思了


一、进度

二、基本内容

1.Cost Function for Nerual Network

之前我们给出的Cost Function长这样:

现在的问题是我们考虑多重输出,那么y就不是一个数了,而是一个向量,例如[1,0,0,0]表示是第一种输出,[0,0,1,0]表示第三种输出,etc.

So, 先有定义:

(这么重要的式子因为太长而只能变那么小...)

 这个式子要细细分析一下,前部分是基本内容,后半部分是regularization的内容,因此分别解释。

对于前半部分而言:

1.首先对于中括号中的内容,单从理解意义上来说可以只看一半,因为两个加数的形式都差不多,不过是分段函数的两部分;

2.累加的部分是对于第i个样本,累加所有的k,最后把所有的i全部加上。所以讨论k的时候,i可以暂时忽略一下。那么对于某一个i来说,累加k就变成了如下形式:

 首先,yk是一个真实结果向量,hθx是预估结果向量,维数相同,两个相乘就是类似

 那么这个结果其实就是一个数。

那么对于任何第i个样本,最后都会加成一个数,那么把所有的i个样本的值加在一起再取平均,那么前半部分就可以理解了;

3.后半部分我一开始直接好家伙,三个求和,其实比前半部分还要简单:

依旧从内到外分析,j表示后面一层的神经元个数,所以是s(l+1),i表示前一层的神经元个数,所以是s(l)。那么对于在特定l位置的累加,就表示把这个未知的θ矩阵元素全部加起来。那么加上最前面的总求和,就等于说把l-1个θ矩阵的所有元素全部加起来。这也和我们之前的regularization的思路一致:我们不知道那个是导致过拟合的元凶,那就只能全部regularize。 至于前面的含λ系数,就只是一个系数: (

2.Backpropagation Algorithm

Back to fundamental,我们给出Cost Function的目的是为了对此操作,使得操作过后,把Cost Function减少。在这里,BP用到的是求偏导的方法:

 对每一个θ都求偏导,但是照样不用我们写过程,Andrew已经给写好了:

这一页的东西我只能用赛高来形容。仔细分析一下:

1.首先我们要知道BP的目的是帮助求偏导。所以在已经给定θ的情况下,我们引入一个变量△,把l-1个△矩阵的值都设为0。注意!这里的△和θ不是一回事!

2.对于所有的i个样本值依次进行这个操作,所以△值只有在一开始是0;

3.从左到右依照我们之前的做法(Forward Propagation)把所有的Hidden Layer的值全部写上,包括最后得Output Layer的预估值;

4.接下来出现了一个新的字母:δ。首先计算最后一层的δ(L) = a(L) - y(i),等于说这一层的δ给出的是最直接的误差向量。Andrew对于δ的定义是:“error” of node j in layer l。值得注意的是,Andrew还明确了δ实际上是Cost Function对z的偏导数:

 5.然后是依次计算之前的所有delta,注意算到第二层结束。过程如下:

 这里是有迭代的意思,先有最后一层的δ,然后才有前一层的δ。以该图为例,δ(4)是一个很明显的4*1的向量。接下来考虑δ3。原来我们说θ是一个j*i的矩阵,j表示下一层的神经元个数,i表示上一层的神经元个数+1,而在这里似乎有点不太一样了。此处的θ应该还是j*i的矩阵,只是i不用包括上一层的bias神经元。这样的话,δ(3)就是一个(4*5)T*(4*1)的向量,结果是5*1。至于后面的.*先不考虑,至少不会影响δ的维数,所以不会出错。然后考虑δ(2),就是一个(5*5)T*(5*1)的向量,结果也是5*1,刚好对应上了“error” of node j in layer l。

关于g'(z),原来的g(z) = 1/1+e^(-hx),然后对他求导数(不会),最后可以变成这个形式:

 不知道是怎么导出来的,但这毕竟也是一个和前面的同维向量,维数就是该层的神经元个数,因此可以.*。

6.接下来考虑那个可爱的△。相比PPT里的这样写,我更喜欢阅读材料里vectorization的写法:

 这里应该是l层△里的每个元素都加上后面那一坨。

这样回到最前面之后,我们就得到了第一次BP完成的所有△值。

7.当把所有i层的东西全部按照这样写一遍之后,我们就可以得到最终的△值了。类似一组横向防放置的矩阵。这时候我们引入D:

 还是分类讨论。对于Input Layer后的△矩阵,我们只用取m的平均值作为D矩阵,对于其他的所有△矩阵,都要加上一个用于regularization的θ参数。最后得到的D就是一个三维的东西,表示:

 

8.我们求出偏导数的目的在之前就讲过了(然而我还是记不太清: D):

 等于说就是把三维内所有的θ值进行更新,而我们刚刚做的一大堆就是就是求出偏导数。

9.对于特定的某个δ,我们可以这样看:

BP对于单个的δ可以看成:

其实感觉有点哲学的味道在里面:用有瑕疵的θ算出的值得到的误差,最后返回来用误差去乘θ,从而改善θ。当然具体原理我暂时理解不了,先继续下去看看吧。 


总结

举报

相关推荐

0 条评论