当前位置: 代码迷 >> 综合 >> 机器学习 | Week4-Neural Networks Representation神经网络:表达
  详细解决方案

机器学习 | Week4-Neural Networks Representation神经网络:表达

热度:65   发布时间:2024-02-02 12:59:35.0

作为英语课程,读中文参考资料的确有助于理解,但是出于对以后更长久的学习优势考虑,笔记中我会尽量采用英文来表述,这样有助于熟悉专有名词以及常见语法结构,对于无中文翻译的资料阅读大有裨益。

Week4-Neural Networks Representation神经网络:表达

一、Non-linear Hypothesis非线性模型(经过考虑,事实上hypothesis这里更像一个模型而非假设,事实上吴恩达在week1的课程中也指出hypothesis这个叫法不够恰当,但是大家都这么叫也就沿袭了)

Linear regression and Logistic regression都需要过多的features,这会导致拟合计算量极大

  • 线性回归和逻辑回归都是多项式

  • 使用排列组合决定参数数目的的非线性形式多项式

但是计算量肉眼可见依然极其庞大,因此引入一种存在很久的古老算法——Nerual Networks神经网络

第一块的第二节视频介绍了一下历史,etc.略过

二、Model Representation模型表示

  1. neuron model:logistic unit

    1. activation unit 激活单元
    2. weight 权重 θ \theta , or paramaters 参数
    3. input units输入单元
    4. 第一层input layer,最后一层output layer,中间层为hidden layers,每一层可以加一个偏差单位bias unit(==1)
  2. Neural Network

    1. a i j a_i^j :=activation of unit i in layer j ;第j层的第i个神经元的激励,指输入后一个神经元得到的输出值

    2. Θ j \Theta^j 权重矩阵,控制着从j到j+1层的映射

    3. g:激励函数

    4. j层有 s j s_j 个神经元,j+1层有 s j + 1 s_{j+1} 个神经元,则权重矩阵维度为 s j + 1 ? ( s j + 1 ) s_{j+1}*(s_j+1) 最后的1是整体加一列,这是因为x1层中多了一个常数偏差单位,而a1层中的常数偏差单位并不需要被计算, S j + 1 S_{j+1} 层是矩阵的行(每层输出结果数,a的数目),( S j S_j +1)是列

  3. Forward Propagation:Vectorized implementation前向传播算法的矢量化

    1. z 2 = Θ 1 a 1 z^2=\Theta^1a^1
    2. a 2 = g ( z 2 ) a^2=g(z^2) ,add a 0 2 = 1 a_0^2=1
    3. z 3 = Θ 2 a 2 z^3=\Theta^2a^2
    4. h Θ ( a ) = a 3 = g ( z 3 ) h_\Theta(a)=a^3=g(z^3)
    5. 描述:神经网络所做的就像逻辑回归logistic,但并非用x1,x2作为输入特征,而是用a1,a2作为新的输入特征,此特征是自己产生的,通过计算效果比直接用X1,X2作为特征输入好,隐藏层变成了输入向量,这些特征值比x能更好的预测数据

三、Application(Examples)

  1. 单层神经元可以当作一个逻辑运算单元,看可以执行异或、与、非异或等

  2. 多层神经元

    1. 在取非运算的参数前放一个绝对值很大的负数作为权值
  3. Multiclass Classification多类别分类

    • 每个数据在output layer都只有一个1,也就是one of [ 1000 ] T [1 0 0 0]^T 的含义

四、Programming Assignment

  1. 第一部分变成任务和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;
    
  2. 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
    
    1. 需要使用fmincg函数而非fminunc
    2. 这个新的优化函数是个坑==,照着注释原模原样用就可以了;
    3. 这一步题目中说的好像很多,但其实就相当于对每一个选定的C=1:num_label和相应的y==c代入,得到每个C对应的代价函数
  3. 在第二步中已经得到了对应y==c(1~10)的 Θ \Theta 函数,那么这里分别带入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(行/列号)

  4. 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;
    
    1. 最简单的三层前向算法神经网络
  相关解决方案