CS224n (Spring 2017) assignment 1-----2. Neural Network Basics

CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第1张图片


:这里的x是scalar, vector稍微复杂一些。


CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第2张图片

CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第3张图片

第二种做法:

CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第4张图片

注:注意求导的时候jacobian的维度,第一次就是把维度搞错了(因为这里两个维度都是C * C), 所以导致算了很久的结果。

Tensor求导可参考:

http://cs231n.stanford.edu/handouts/derivatives.pdf


CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第5张图片

CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第6张图片






CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第7张图片

CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第8张图片

注:这里存在一个问题,sigmoid_grad(s) 当s是一个向量或者是矩阵的时候,求导应该是一个jacobian, 而代码里没有求jacaobian, 只是在原有s的基础上求了导,ds与s维度相同。那么在反向传播运用链式法则的时候是怎么保证维度统一的呢?如下图,当s是一个vector时,ds的应该是一个n*n的对角矩阵:

CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第9张图片

这个问题是怎么解决的呢?以2.c为例,如下图:

CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第10张图片

cs231n那个derivative的文章处理的是线性函数的情况,这里处理的是sigmoid,都是不用求jacobian的,求jacobian太占内存。



CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第11张图片


CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第12张图片

CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第13张图片

注:这里是按照每个维度来验证的。



CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第14张图片

CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第15张图片

CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第16张图片

CS224n (Spring 2017) assignment 1-----2. Neural Network Basics_第17张图片

:(1)注意每个变量的维度,先把握好维度,然后再dot相乘,另外dot要根据实际的维度来写变量相乘的顺序,系统不会自动调整顺序,否则报错。

      (2)红框中的计算cost的算法正确,上边注释的不正确。

      (3)注意sigmoid_grad()要传入的是sigmoid的结果,而不是变量。

你可能感兴趣的:(CS224n作业)