作为英语课程,读中文参考资料的确有助于理解,但是出于对以后更长久的学习优势考虑,笔记中我会尽量采用英文来表述,这样有助于熟悉专有名词以及常见语法结构,对于无中文翻译的资料阅读大有裨益。
Week4-Neural Networks Representation神经网络:表达
一、Non-linear Hypothesis非线性模型(经过考虑,事实上hypothesis这里更像一个模型而非假设,事实上吴恩达在week1的课程中也指出hypothesis这个叫法不够恰当,但是大家都这么叫也就沿袭了)
Linear regression and Logistic regression都需要过多的features,这会导致拟合计算量极大
-
线性回归和逻辑回归都是多项式
-
使用排列组合决定参数数目的的非线性形式多项式
但是计算量肉眼可见依然极其庞大,因此引入一种存在很久的古老算法——Nerual Networks神经网络
第一块的第二节视频介绍了一下历史,etc.略过
二、Model Representation模型表示
-
neuron model:logistic unit
- activation unit 激活单元
- weight 权重 , or paramaters 参数
- input units输入单元
- 第一层input layer,最后一层output layer,中间层为hidden layers,每一层可以加一个偏差单位bias unit(==1)
-
Neural Network
-
:=activation of unit i in layer j ;第j层的第i个神经元的激励,指输入后一个神经元得到的输出值
-
权重矩阵,控制着从j到j+1层的映射
-
g:激励函数
-
j层有 个神经元,j+1层有 个神经元,则权重矩阵维度为 最后的1是整体加一列,这是因为x1层中多了一个常数偏差单位,而a1层中的常数偏差单位并不需要被计算, 层是矩阵的行(每层输出结果数,a的数目),( +1)是列
-
-
Forward Propagation:Vectorized implementation前向传播算法的矢量化
- ,add
- 描述:神经网络所做的就像逻辑回归logistic,但并非用x1,x2作为输入特征,而是用a1,a2作为新的输入特征,此特征是自己产生的,通过计算效果比直接用X1,X2作为特征输入好,隐藏层变成了输入向量,这些特征值比x能更好的预测数据
三、Application(Examples)
-
单层神经元可以当作一个逻辑运算单元,看可以执行异或、与、非异或等
-
多层神经元
- 在取非运算的参数前放一个绝对值很大的负数作为权值
-
Multiclass Classification多类别分类
- 每个数据在output layer都只有一个1,也就是one of 的含义
四、Programming Assignment
-
第一部分变成任务和week3的正则化逻辑回归表达式一致,实际上课程意思week3就用loop来做矩阵计算,week4教你向量化矩阵计算
h_theta=sigmoid(X*theta);% 5*1 J=sum(-y'*log(h_theta)-(1-y)'*log(1-h_theta))/m+lambda*sum(theta(2:end,:).^2)/(2*m);% 1 demension % =============================================================grad = grad(:); grad(1)= (h_theta-y)'*X(:,1)/m; grad(2:end)= (h_theta-y)'*X(:,2:n)/m+lambda*theta(2:n)'/m;
-
One-vs-ALL Classfication
for c=1:num_labelsinitial_theta = zeros(n + 1, 1);options = optimset('GradObj', 'on', 'MaxIter', 50);all_theta(c,:) = ...fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), ...initial_theta, options); end
- 需要使用
fmincg
函数而非fminunc
- 这个新的优化函数是个坑==,照着注释原模原样用就可以了;
- 这一步题目中说的好像很多,但其实就相当于对每一个选定的C=1:num_label和相应的y==c代入,得到每个C对应的代价函数
- 需要使用
-
在第二步中已经得到了对应y==c(1~10)的 函数,那么这里分别带入c的值,h=1也就是预测了这个c值,否则就不是;
[c p]=max(sigmoid(X*all_theta'),[],2);% X m*(n+1) all_theta 1*n+1 p=m*1 a_2=m*1
-
注意matlab中max函数用法
C = max(A,[],dim) 返回A中有dim指定的维数范围中的最大值,dim=1按列,dim=2按行
如果A是一个矩阵,max(A)将A的每一列作为一个向量,返回一行向量包含了每一列的最大元素
[a b ]=max(A),a是最大值,b是最大值的index(行/列号)
-
-
Neural Networks
a2=sigmoid(X*Theta1'); % X m*n+1 Theta 25 * n+1 a2=[ones(size(a2,1),1) a2]; %m*26 a3=sigmoid(a2*Theta2'); [maxnum index]=max(a3,[],2); p=index;
- 最简单的三层前向算法神经网络