感觉自己看懂了,那就写一写,好耶!
本章节原英文课件链接:https://pan.baidu.com/s/1KlxQlaYrLWFct3euO3f_pg
提取码:bb1a
我认为的基本逻辑线:
首先,是从最优化(optimization)开始,先引入的一般是一元二次函数,即抛物线上求最小值;随后由一元函数演变为多元函数求极值的问题,如抛物面求最低点的问题,这里会涉及高等数学的知识,往往需要求取输入成分的偏导数的方式进行求解。
随后,cs231n就computational graph(计算图例)的方式给出了简单的举例。
引出两个概念,前向传递(Feedforward)和反向传递(Back propagation)。前者就是在做计算,挺容易理解的,结构就是:输入-运算-输出;后者的话,则是想在这样的一个运算结构下,求取极值问题了,也就是回到最优化的目的。如前文所说,就想求取每一个输入成分的偏导数。对,就是偏导数!
由于输入成分经过多重运算,怎么获得结果对于初始输入成分的偏导数呢?那么就得借助高等数学中的“链式法则”(chain rule)进行逐步求导。其中的L函数应该想表示的就是损失函数(Lost function)。
cs231n中一个较为简单的例子:图中绿色数字为前向传递的数值,而红色数字是反向传递。其中,L函数结果对于自身Z求导为1,所以反向传递的起始值为1。
cs231n中另外一个较为复杂的例子。关注反向传递:先将每一个运算节点,也就是小圆圈里的内容进行求导(获得函数式),然后代入该点的输入值(前向传播中,从左往右,小圆圈左边的即为输入值),最终获得该点的导数值(是一个数)。随后,根据链式法则,反复上述过程,不断反向,最终求得对于初始输入的偏导数值。下图中乘的(1.00)是根据链式法则,即L函数对自身Z的求导。
那么,当例子中具体的数值(绿色数字)转变成某一个变量,如a/b/c的话,对于每一个输入成分的偏导数就会与这些变量a/b/c有关了,于是就可以研究其中的关系,调整输入成分a/b/c,实现这个计算图例的最优化目的了。
随后,在此基础上,将计算图例复杂化,也就成了神经网络里的各级层。但同样,基础结构就是:输入-运算-输出;而反向传播,同样是按照上述的原理,探究如何控制输入的,解决最优化的问题!cs231n里面呢,是先说明了这个神经网络的真实层级情况,随后再讲述其本质的基础结构,而我只是换了一个顺序,说明了基础结构的原理,然后复杂化,就是神经网络的层级问题。