我是靠谱客的博主 忧虑水壶,最近开发中收集的这篇文章主要介绍My solution to cs224n assignment1(1-2)My solution,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

My solution

1.softmax

(a)sotfmax的性质

这里写图片描述

  容易证明该性质。
  Note指出,这个性质可以应用于计算softmax函数的值。这样手动把最大值调整成了0,避免了上溢出,而即使产生下溢出,也是下溢出到零,不会太损失精度。

(b)softmax的计算

这里写图片描述
  
  Note指出numpy的向量化计算比较快,所以尽量少用for循环。numpy向量化运算相比循环,跳转逻辑更少,更容易并行,也更容易使用显卡算力,计算更快。
  另外,代码要注意numpy库中的维度设定,运算的时候要时刻注意维度。

2.Neural Network Basics

(a)sigmoid的导数

这里写图片描述

   σ(x)=(1+ex)(1+ex)2=ex(1+ex)2=σ(x)(1σ(x))

(b)交叉熵函数的导数

这里写图片描述

   CEθ=(log(y^k))θ=1y^ky^kθ
  
  对下标分别标量求导
   y^kθk=(eθk)ieθieθk(ieθi)(ieθi)2=eθkieθieθkeθk(ieθi)2=y^k(1y^k)y^kθj=(eθk)ieθieθk(ieθi)(ieθi)2=eθkeθj(ieθi)2=y^ky^j(jk)

  合并下标
   y^kθ=(1(k=j)y^ky^ky^j)j=y^k(yy^)
  
  代入整理得
   CEθ=y^y

(c)(d)BP in Neural Network

这里写图片描述
这里写图片描述
  注意输入是行向量,求导的时候要时刻注意维度。
  
  首先解答(d),同时把维度搞清楚,设|minibatch|=M:
   xRM×Dx,W1RDx×H,b1RHhRM×H,W2RH×Dy,b2RDy,y^RM×Dy
  中间对 bi 的加法用了一次复制,也就是说,实际加的是 bi1TM 矩阵
  
   parament=[W1,b1,W2,b2]|parament|=(Dx+1)H+(H+1)Dy
  
  清楚了维度,可以利用链式法则和维度调整方法解答(c):
  定义 z2=hW2+b21TM
  首先认为对minibatch的每个输入都有交叉熵 Jm ,定义 J=1TM(Jm) ,即损失函数简单地定义为总交叉熵,如果交叉熵损失函数定义为所有交叉熵的平均值,那么下面的所有导数都要除以M。
  则 Jz2=1M(Jm)mz2=y^y
  
   JW2=hT(y^y)Jb2=1TM(y^y)=sum((y^y),dim=0)
  
  定义 z1=hW1+b11TM
   Jz1=(y^y)WT2σ(z1)=(y^y)WT2(h(1h))
  
   JW1=hT(y^y)WT2(h(1h))Jb1=1TM(y^y)WT2(h(1h))=sum((y^y)WT2(h(1h)),dim=0)

(e)(f)(g)Neural Network代码实现

这里写图片描述

  (e)比较容易。
  有了上面的公式,(g)实现起来也比较容易。
  注意(g)中检查导数的方法是,把参数全部压成一维,传入(f)中的检查函数。
  (f)为偏导数检查的函数,需要注意一些细节,数值估计某个维度偏导数的代码如下:
  


x0 = x[ix]
x[ix] += h
random.setstate(rndstate)
new_f1 = f(x)[0]
x[ix] -= 2*h
random.setstate(rndstate)
new_f2 = f(x)[0]
x[ix] = x0
numgrad = (new_f1 - new_f2) / (2 * h)

  1)f只能把x格式的一维向量当作输入,所以要修改x某一个维度的值,只能在原值上修改,最好不要复制一个x浪费空间。
  2)为了不修改x的值,最后记得改回去,改回去最好不要用加了h,减了2h,就再加h来获得原值(虽然网上所有人都是这么做的),最好用一个额外变量记录,因为浮点数误差问题,x0+h-2h+h不等于x0。虽然误差很小,但是原则上说,代码的检查函数应该保存了检查导数前的x0,检查导数后为了确定没有修改原来的函数参数,应该assert(x==x0)。
  3)调用前记得初始化随机数种子
  4)泰勒展开知 f(x+h)f(xh)2h=f(x)+o(h) ,而 f(x+h)f(x)h=f(x)+f′′(x)2h+o(h) ,前者更精确。

最后

以上就是忧虑水壶为你收集整理的My solution to cs224n assignment1(1-2)My solution的全部内容,希望文章能够帮你解决My solution to cs224n assignment1(1-2)My solution所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部