反向传播的些许思考 2019-04-30

反向传播的些许思考

1 先看下面的关于概率计算的一个例子

科技袁人视频

先看问题:有A、B两位球员分别参加了大师赛和菜鸟赛,(这两个赛事无论从哪个看都是球员A更优秀,可是统计结果却显示球员B比球员A更优秀,这时为什么?是我们经常用的统计学原理出错啦? 辛普森悖论

(10/80):代表球员参加了80场赛,总共胜了10场

球员A 球员B
大师赛 10% (8/80) 5% (1/20)
菜鸟赛 100% (20/20) 50% (40/80)
统计 28% (28/100) 41% (41/100)

2:引入积分

通过引入积分来解决这个问题,就是分别对大师赛、菜鸟赛的胜率乘以积分得出一个(0-1)的结果!你看我们用统计,简单的乘除还是能够很优秀的处理这类问题的嘛!

球员A 球员B 积分
大师赛 10% (8/80) 5% (1/20) 0.8
菜鸟赛 100% (20/20) 50% (40/80) 0.2
统计 0.28 0.14

3:二项式小球问题

然后我们来看这个问题

(1/4):表示容器中有4个小球,在某次事件中小于等于1个小球发生的概率

容器A 容器B 积分
小球占比 25% (1/4) 25% (2/8) 25% (200/800)
统计

我们看到小球占比一致的情况下,统计的概率也会有较大的偏差,在小球个数很大的情况下,概率可以用正态分布的函数求出来,这时我们以前常用的方法就再也不实用了。

正太分布图


xx

4: 引入函数(分子内部的激烈程度,或者可以把它想象为灯的亮度)

熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。在信息论里面,熵是对不确定性的测量

前面写了那么多东西只是为了启发你为什么要引入下面这个公式:

  • ps: 图中的log是用以2为底进行绘制的

请看下面这个图,他跟正太分布函数近似,我们可以把它看做分子内部的激烈程度的一个函数,当容器中的小球刚好到一半的时候,分子的激烈重度最强,或者说这个状态下的不确定性最大


熵.png
xx

5: 反向传播

反向传播理论

6: 为什么引入sigmoid函数

通过这个方程的引入,我们可以把任何实数限制到0-1内


7 一个简单的实例

随机生成一个100*3的输入,用一个3*1的theta对它进行一次变换,,运用反向传播的方法逼近theta的值,最小化J

当然这个问题可以用最小二乘的方法一步到位的求出来,写这个代码的目的,是为了思考

  • sigmoid的偏导为什么是 f(x)*(1-f(x)
  • theta 为什么是这么更新 lamda * x' * g
  • J 在吴恩达的教程中明明不是这么表达的!为什么吴恩达的那个公式不妥!应用条件是什么
    clear all;clc;
    x = rand(1000,3);
    m = length(x);
    lamda = 0.01;
    theta = rand(3,1);
    z = x*theta;
    y = 1./(1+exp(-z));
        
    theta_start = [0.2; 0.3; 0.4];
    n_feature = length(theta_start);
    period = 100;
    save_theta = zeros(n_feature , period);
        
    for i = 1:period
        new_z = x * theta_start;
        p_y = 1./(1+exp(-new_z));
        % 输出偏差平方和
        J(i) = (y - p_y)'*(y-p_y)/2/m ;
        %f(x)的偏导是f(x)*(1-f(x))
        diff_fx = p_y.*(1-p_y);
        %输出的对theta的偏导为
        g = (y-p_y).*diff_fx  ;
        %对theta进行更新
        theta_start = theta_start + lamda * x' * g;
        save_theta(:,i) = theta_start;
    end
        
    j = 1:period;
    figure(1);
    hold on
    plot(j, J*m /5)
    plot([1 1 1;period period period],[theta theta]')
    plot([j; j; j]' , save_theta')
    hold off
xx

8 吴恩达视频教程的作业

xx
sigmoid.png
t1_slide = Theta1(2:end);
t2_slide = Theta2(2:end);

add_slide = sum(sum(t1_slide.^2,1),2) + sum(sum(t2_slide.^2, 1),2) ;
add_slide = add_slide * lambda/ 2/ m;

a1_add = [ones(size(X,1),1) X];

z2 =   a1_add * transpose(Theta1);
a2 = 1 ./ (1 + exp(-z2)) ;

a2_add = [ones(size(a2,1),1) a2];
z3 = a2_add * transpose(Theta2);
a3 = 1 ./ (1 + exp(-z3)) ;
real_y = zeros(size(z3));
for i = 1:m
    index = y(i);
    real_y(i, index) = 1;
end
xx.png

你可能感兴趣的:(反向传播的些许思考 2019-04-30)