最近一直在看deep learning相关的论文.
虽然从06年到12年的重要论文都扫了一遍, 真的自己干起来还真不知道怎么入手.
总之先从基本开始吧.顺带整理成博客.
另外除了06年开山的两篇论文, 02年还有一篇"自然语言的概率模型"这十分重要的论文,
在搞定了目前基本的deep learning方法后我会实现这些东西, 然后重复12年ng小组的工作.
不过...
想一口就搞定没那么容易, 所以还是慢慢来. 好在大部分都很简单. 教程采用Ng的wiki, 这次是这个
http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex2/ex2.html
提一句, ng全部都用的matlab, 但我不怎么喜欢, 我也不确定matlab能不能用mpi.
因此我会用d语言完成.
首先是最简单的Linear Regression. 用gradient descent来拟合. 很简单, 我们迅速完成它
import std.stdio, std.math, std.conv, std.random, std.string;
class fit{
float a,b;
float alpha = 0.07;
float m;
float h(float x){
return a*x+b;
}
void update(float x, float y){
auto y1 = h(x);
a -= alpha*(y1-y)*x/m;
b -= alpha*(y1-y)/m;
}
this(float m){
a = uniform(-1,1);
b = uniform(-1,1);
this.m = m;
}
}
int main(){
float[] x,y;
foreach(l;File("ex2x.dat").byLine){
x ~= to!float(strip(cast(string)l));
}
foreach(l;File("ex2y.dat").byLine){
y ~= to!float(strip(cast(string)l));
}
auto f = new fit(x.length);
foreach(k;0..1500){
foreach(i,v;x){
f.update(v,y[i]);
}
float j=0;
foreach(i,v;x){
j += (f.h(v)-y[i])^^2;
}
writeln(f.a,"\t", f.b, "\t", j);
}
return 0;
}
最后接近收敛时的数据
0.0636027 0.750624 0.0987597
0.0636027 0.750624 0.0987597
0.0636026 0.750624 0.0987597
0.0636026 0.750625 0.0987597
0.0636026 0.750625 0.0987597
顺带提一句, 自己画图时记得set xrange, 否则会偶尔崩溃.. gnuplot也没那么靠谱, 不过比mac自带的画图方便
补一张J方图