神经网络

1.前言
       1.当特征太多时,无论线性回归还是逻辑回归计算的负荷都会非常大。
       2.使用非线性的多项式往往能够帮我们建立更好的分类模型。然而特征组合数量却非常惊人,例如:2500个特征,仅两两组合就有2500^2/2(近300万个)。普通逻辑回归不能有效处理这么多特征。
       这时候我们需要神经网络。

2.神经网络简介(可直接参考:https://blog.csdn.net/illikang/article/details/82019945
       神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。在大脑中,神经网络是大量神经元相互连接并通过电脉冲来交流的一个网络。下面是一组神经元的示意图:
                                                    

神经网络模型也建立在很多神经元之上,这些神经元也叫做激活单元。
输入——树突(Dendrite)
处理单元——神经核(Nucleus)
输出——轴突(Axon)

下图为一个三层神经网络:
                                                 
Layer1:输入层——输入单元
Layer2:隐含层/中间层——隐含单元 /中间单元
Layer3:输出层——输出单元
a_{i}^{(j)}:代表第j层的第i个激活单元。
\theta ^{(j)}:代表从第j层映射到第j+1层时的权重的矩阵,行数为第j+1层的单元数量,列数为第j层单元数加一。
上图所示模型中,激活单元和输出分别表示为:
                                                     (1)
这里只是计算一个样本/一个训练实例的情况。而我们需要用所有样本来进行神经网络模型的训练。
        像(1)式,每一层的a都是由上一层的所有x和x对应的权值决定的。每一层的输出变量都是下一层的输入变量。我们把这种从左到右的算法称为前向传播算法。我们可以把a_{1},a_{2},a_{3} 看成更为高级的特征看成更为高级的特征值,也就是 𝑥0,𝑥1,𝑥2,𝑥3的进化体,的进化体,并且它们是由 𝑥与决定的,因为是梯度下降所以 𝑎是变化的,并且得越来厉害,所以这些更高级的特征值远比仅将 𝑥次方厉害,也能更好的预测新数据。 这就是神经网络相比于逻辑回归和线性的优势。 

3.多类分类
        当我们要训练一个神经网络来识别路人、汽车、摩托车和卡车,在输出层我们应该有四个值。例如第一个值为1或0用于预测是否是行人,第二个值用于判断是否是汽车...下面是该神经网络的可能结构示例:
                                 
神经网络算法的输出结果为下面四种可能情形之一:
                                                                    
4.代价函数
神经网络的分类分为二分类和多分类两种情况。
                   
L:神经网络总层数
S_{l}:第l层的单元数

逻辑回归中我们的代价函数为:
                                     (2)
神经网络中,我们的h_{\theta}(x)是一个维度为K的向量,代价函数为:
                          (3)
对于每一个样本,我们会给出K个预测结果,然后在K个预测中选择可能性最高的一个,将其与y中实际数据进行比较。

5.求最优解
       和逻辑回归一样,还是使用梯度下降方法来求解代价函数最优解。用梯度下降方法主要就是求代价函数的偏导数\frac{\alpha }{\alpha\theta^{(l)}}J(\theta)
先不考虑正则项,且只有一个样本,一个隐含层时:
                                                \begin{aligned} J(\theta )&= -[ylog(h_{\theta}(x))+(1-y)log(1-h_{\theta}(x))]\\ &=-[ylog(\frac{1}{1+e^{-\theta ^{T}x}})+(1-y)log(1-\frac{1}{1+e^{-\theta ^{T}x}})]\\ &=ylog(1+e^{-\theta ^{T}(x))})+(1-y)log(1+e^{\theta ^{T}(x))}) \end{aligned}  (4)
\theta求偏导得:
                                                          \begin{aligned} \frac{\alpha }{\alpha \theta }J(\theta )&=(\frac{1}{1+e^{-\theta ^{T}x}}-y)x\\ &=(h_{\theta }(x)-y)x \end{aligned}                                        (5)
但神经网络往往都有多个隐含层,如何对多个隐含层\theta ^{(l)}求偏导呢?

  1. 前向传播算法
           前面我们计算神经网路的预测结果时采用了前向传播方法,我们从第一层开始正向一层一层进行计算,直到最后一层。假设我们只有一个训练实例(x^{(1)},y^{(1)}),我们的神经网络是一个四层神经网络。其中K=2(类别数),S_{L}=1(最后一层单元数),L=4:     
                                     

                                                         
    即:

                                                           h_{\theta }(x) = g(\theta ^{(3)}g(\theta ^{(2)}g(\theta ^{(1)}x)))                                                   (6)
    带入代价函数:
                            J(\theta )&= -[ylog(g(\theta ^{(3)}g(\theta ^{(2)}g(\theta ^{(1)}x))))+(1-y)log(1-g(\theta ^{(3)}g(\theta ^{(2)}g(\theta ^{(1)}x))))]     (7)
     
  2. 后向传播算法
                     J(\theta )&= -[ylog(g(\theta ^{(3)}g(\theta ^{(2)}g(\theta ^{(1)}x))))+(1-y)log(1-g(\theta ^{(3)}g(\theta ^{(2)}g(\theta ^{(1)}x))))]

             \frac{\alpha }{\alpha \theta ^{(1)}}J(\theta ) = (h_{\theta }(x)-y)*\theta ^{(3)}*g(\theta ^{(2)}g(\theta ^{(1)}x))*(1-g(\theta ^{(2)}g(\theta ^{(1)}x)))*\theta ^{(2)}*g(\theta ^{(1)}x)(1-g(\theta ^{(1)}x))*x

                   \frac{\alpha }{\alpha \theta ^{(2)}}J(\theta )=(h_{\theta }(x)-y)*\theta ^{(3)}*g(\theta ^{(2)}g(\theta ^{(1)}x))*(1-g(\theta ^{(2)}g(\theta ^{(1)}x)))*g(\theta ^{(1)}x)

                   \frac{\alpha }{\alpha \theta ^{(3)}}J(\theta ) = (h_{\theta }(x)-y)*g(\theta ^{(2)}g(\theta ^{(1)}x))

    仔细看看其实这些式子是有关系的:
    \delta ^{(4)} =h_{\theta }(x) - y , 则:

                                                                    \frac{\alpha }{\alpha \theta ^{(3)}}J(\theta ) = \delta ^{(4)}a ^{(3)}

     \begin{aligned} \delta ^{(3) }&=(h_{\theta }(x)-y)*\theta ^{(3)}*g(\theta ^{(2)}g(\theta ^{(1)}x))*(1-g(\theta ^{(2)}g(\theta ^{(1)}x)))\\ &=\delta ^{(4)}\theta ^{(3)}g'(z^{(3)}) \end{aligned}                   
    则:
                                                                   \frac{\alpha }{\alpha \theta ^{(2)}}J(\theta ) = \delta ^{(3)}a ^{(2)}

    \begin{aligned} \delta ^{(2) }&=(h_{\theta }(x)-y)*\theta ^{(3)}*g(\theta ^{(2)}g(\theta ^{(1)}x))*(1-g(\theta ^{(2)}g(\theta ^{(1)}x)))*\theta ^{(2)}*g(\theta ^{(1)}x)(1-g(\theta ^{(1)}x))\\ &=\delta ^{(3)}\theta ^{(2)}g'(z^{(2)}) \end{aligned}

                                                                   \frac{\alpha }{\alpha \theta ^{(1)}}J(\theta ) = \delta ^{(2)}a ^{(1)}
    我们把\delta ^{(l)}看成l层的误差,然后由后一层误差算出前一层的误差,第一层是输入变量不存在误差,偏导数也是由后往前计算。这种方法我们称其为后向传播算法。
  3. 如果直接用前向算法计算偏导数,则会存在很多重复的计算。
             \frac{\alpha }{\alpha \theta ^{(1)}}J(\theta ) = (h_{\theta }(x)-y)*\theta ^{(3)}*g(\theta ^{(2)}g(\theta ^{(1)}x))*(1-g(\theta ^{(2)}g(\theta ^{(1)}x)))*\theta ^{(2)}*g(\theta ^{(1)}x)(1-g(\theta ^{(1)}x))*x

                   \frac{\alpha }{\alpha \theta ^{(2)}}J(\theta )=(h_{\theta }(x)-y)*\theta ^{(3)}*g(\theta ^{(2)}g(\theta ^{(1)}x))*(1-g(\theta ^{(2)}g(\theta ^{(1)}x)))*g(\theta ^{(1)}x)

                   \frac{\alpha }{\alpha \theta ^{(3)}}J(\theta ) = (h_{\theta }(x)-y)*g(\theta ^{(2)}g(\theta ^{(1)}x))
    先算\frac{\alpha }{\alpha \theta ^{(1)}}J(\theta )再算\frac{\alpha }{\alpha \theta ^{(2)}}J(\theta )再算\frac{\alpha }{\alpha \theta ^{(3)}}J(\theta ),可以看到很多都重复计算了。
  4. 总结神经网络求最优解步骤
    step1:随机初始化参数\theta
    step2:通过前向算法计算出每一层的激活单元a^{(l)}
    step3:计算最后一层的误差\delta ^{(L)}=h_{\theta }(x)-y,利用该误差运用反向传播法计算直至第二层的所有误差\delta ^{(l)}
    step4:计算偏导数\frac{\alpha }{\alpha \theta ^{(l)}}J(\theta ) = \delta ^{(l+1)}a ^{(l)}
    step5:计算梯度D^{(l)}=\frac{1}{m}\frac{\alpha }{\alpha \theta ^{(l)}}J(\theta )+\lambda \theta ^{(l)}(注意:计算时偏置项参数不参与正则化);
    step6:更新参数\theta ^{(l)}:=\theta ^{(l)} - \alpha D^{(l)}
    step7:不断迭代step2-6更新参数直至达到收敛条件。

6.随机初始化参数
       逻辑回归中,参数都初始化为0,但这种方法对于神经网络行不通。如果我们令所有的初始参数都为0,这意味着我们的第二层的多有激活单元都会有一样的值,同理,全部初始化为同一个不为0的数结果也一样。我们通常初始化参数为正负\epsilon之间的随机值。其中\epsilon的取值通常为:
                                                                                         \epsilon =\frac{\sqrt{6}}{\sqrt{L_{in}+L_{out}}}
L_{in}L_{out}分别表示该对应的上下层的单元数。

7.梯度检验
       当我们对一个复杂的模型使用梯度下降时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果并不是最优解,为解决这样的问题,我们可以采取一种叫梯度的数值检验的方法。在一个特定的\theta_{1},我们计算出J(\theta_{1} -\epsilon )J(\theta_{1} +\epsilon )\epsilon是个很小的值,通常取0.001
                          
\theta_{1}处的偏导数近似为:
                                                       \frac{\alpha }{\alpha \theta _{1}} = \frac{J(\theta _{1}+\epsilon _{1},\theta _{2},,,\theta _{n})-J(\theta _{1}-\epsilon _{1},\theta _{2},,,\theta _{n})}{2\epsilon _{1}}
依次计算出所有的偏导数,然后和通过反向算法计算出的偏导数比较,正常情况两者差异甚小。

8.代码实现(python)

                                        
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
求高人解答有关BP神经网络输入训练时出现最大值和最小值-neiqian lun.xls   正在做毕设,训练样本为表格形式,在不同车速和方向盘转角输入给定下的车轮角速度。有400多个训练样本,训练时出现了输入最大最小之相等的情况; p=[0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190     200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 0     10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200     210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400    0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190    200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390    400 410 420 430 440 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140    150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340    350 360 370 380 390 400 410 420 430 440 450 0 10 20 30 40 50 60 70 80    90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280    290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 0 10 20    30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220    230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420    430 440 450 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160    170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360    370 380 390 400 410 420 430 440 450 0 10 20 30 40 50 60 70 80 90 100    110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300    310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 0 10 20 30 40    50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240    250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440    450 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180    190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380;   15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15     15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 20     20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20     20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20     25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25     25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25     25 25 25 25 25 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30     30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30     30 30 30 30 30 30 30 30 30 30 30 35 35 35 35 35 35 35 35 35     35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35     35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 40 40 40     40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40     40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40     40 40 40 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45     45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45     45 45 45 45 45 45 45 45 45 50 50 50 50 50 50 50 50 50 50 50     50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50     50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 55 55 55 55 55     55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55     55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55     55 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60     60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60]; t=[740.93 738.49 736.11 733.76 731.41 729.01 726.49 723.8 720.86 717.59 713.94 709.81 705.15 699.89 693.98 687.37 679.99 671.79 662.67 652.55    641.37 628.83 614.93 599.54 582.5 563.66 542.85 519.9 494.63 466.87 436.42 403.08 366.64 326.86 283.46 236.15 184.59 128.36 66.968 987.9    984.7 981.43 978.23 975.07 971.91 968.69 965.34 961.78 957.94 953.74 949.11 943.99 938.34 932.12 925.3 917.85 909.7 900.81 891.1 880.48    868.86 856.12 842.15 826.82 810.01 791.61 771.51 749.64 725.89 700.19 672.47 642.61 610.53 576.1 539.16 499.5 456.91 411.17 362.05 309.29      1234.9 1230.9 1226.6 1222.5 1218.4 1214.4 1210.4 1206.3 1202.1 1197.5 1192.7 1187.4 1181.6 1175.3 1168.4 1160.9 1152.8 1144 1134.3 1123.8    1112.3 1099.8 1086 1071.1 1054.7 1036.9 1017.5 996.5 973.81 949.4 923.22 895.22 865.37 833.63 799.93 764.19 726.31 686.17 643.66 598.63    550.96 500.52 447.13 390.51 330.46 1481.9 1477.1 1471.7 1466.4 1461.3 1456.4 1451.5 1446.5 1441.4 1436    1430.2 1423.9 1417 1409.3 1400.9    1391.7 1381.5 1370.3 1358.2 1344.9 1330.5 1314.8 1297.8 1279.3 1259.4 1237.8 1214.7 1189.8 1163.4 1135.3 1105.6 1074.4 1041.6 1007.1 970.93    932.99 893.17 851.37 807.5 761.47 713.18 662.54 609.47 553.88 495.72 434.9 1728.8 1723.2 1716.5 1710 1703.7 1697.7 1691.8 1685.8 1679.6     1672.9 1665.7 1657.7 1648.7 1638.5 1627.1 1614.4 1600.3 1584.9 1567.9 1549.5 1529.5 1508 1484.9 1460 1433.5 1405.3 1375.4 1343.9 1310.8     1276.2 1240.4 1203.2 1164.8 1125.2 1084.3 1042 998.24 952.8 905.55 856.36 805.15 751.88 696.46 638.86 579.01 516.88 1975.8 1969.4 1961.2     1953.1 1945.6 1938.3 1931.2 1923.8 1916.1 1907.6 1898.1 1887.2 1874.7 1860.5 1844.2 1826 1805.5 1783 1758.4 1731.7 1703.1 1672.6 1640.3     1606.1 1570.3 1532.9 1494 1453.7 1412 1369.2 1325.5 1281 1235.8 1190 1143.4 1095.9 1047.4 997.47 946.03 892.87 837.87 780.98 722.17     661.38 598.59 533.76 2222.8 2215.5 2205.5 2195.8 2186.8 2178.2 2169.5 2160.4 2150.5 2139.3 2126.4 2111.3 2093.8 2073.4 2050.1 2023.6 1994     1961.4 1925.9 1888 1847.7 1805.6 1761.7 1716.4 1669.7 1621.9 1573 1523.2 1472.7 1421.8 1370.8 1319.7 1268.6 1217.2 1165.5 1113.2 1060     1005.9 950.4 893.37 834.66 774.2 711.91 647.75 581.79 514.01 2469.8 2461.7 2449.7 2438 2427.4 2417.2  2406.7 2395.3 2382.4 2367.5 2349.8     2329 2304.5 2275.8 2242.8 2205.5 2164.1 2119 2070.8 2019.8 1966.8 1912.1 1856.1 1799.4 1742 1684.2 1626.1 1567.9 1510.2 1453 1396.5     1340.4 1284.7 1229.1 1173.6 1117.6 1061.1 1003.7 945.04 884.96 823.3 759.99 694.98 628.21 559.64 489.36 2716.7 2707.8 2693.5 2679.6 2667.4     2655.4 2642.7 2628.4 2611.6 2591.7 2568 2539.6 2506 2467.1 2422.9 2373.6 2319.8 2262.3 2201.6 2138.6 2073.7 2007.5 1940.4 1872.9 1805.5     1738.3 1671.6 1606 1541.7 1478.9 1417.5 1357.1 1297.5 1238.6 1179.8 1120.9 1061.6 1001.5 940.25 877.67 813.6 748     680.81 611.99 541.5     469.35 2963.7 2953.9 2937.1 2920.7 2906.9 2892.9 2877.5 2859.5 2837.9 2811.9 2780.4 2743.1 2699.8 2650.2 2595 2534.9 2470.9 2403.6 2333.5     2261.2 2187 2111.4 2034.8 1957.7 1880.6 1804.2 1728.5 1654.5 1582.9 1513.9 1447.2 1382.6 1319.4 1257.2 1195.5 1134.1 1072.4 1010.1 946.91]; [pn,minp,maxp,tn,mint,maxt] = premnmx; net=newff,[14,14,1],{'tansig','tansig','purelin'},'trainlm'); net.trainParam.show=5; net.trainParam.epochs=1000; net.trainParam.goal=1e-5; net=init; [net,tr]=train; 源程序如上,求高人告诉该怎么改动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值