基本概念入手
重要说法:
- 对神经网络进行训练的目的就是为每个神经元找到最适合它的w和b的值.(w为:每个输入所对应的权值。b为:门槛所谓threshold)
- 反向传播(back propagation)是在这种场景下快速求解∂C/∂w、∂C/∂b的算法,用了这个算法的多层感知机--也就是这篇文章讲的神经网络--也就叫作BP神经网络。
- 神经网络的初始权值和阈值需要归一化0到1之间。因为神经元的传输函数在[0,1]之间区别比较大,如果大于1以后,传输函数值变化不大(导数或斜率就比较小),不利于反向传播算法的执行。反向传播算法需要用到各个神经元传输函数的梯度信息,当神经元的输入太大时(大于1比如),相应的该点自变量梯度值就过小,就无法顺利实现权值和阈值的调整)。
- 一般凭经验来确定隐藏层到底应该有多少个节点,在测试的过程中也可以不断调整节点数以取得最佳效果。
- 批量梯度下降(Batch Gradient Descent):实际上批量更新的效果会更好,方法是在不更新权重的情况下,把记录集的每条记录都算过一遍,把要更新的增值全部累加起来求平均值,然后利用这个平均值来更新一次权重,然后利用更新后的权重进行下一轮的计算。
- 初始化的权重参数是随机的,可能会陷入局部最优解,所以有时预测的结果会很不理想。
- 首先,需要说明的是关于神经网络层数的定义,主要是分为3部分:输入层,隐藏层(中间层)和输出层,在定义神经网络的层数时,一般是不包含输入层的,所以针对只有1个隐藏层的神经网络,其层数为2。
补充概念:
1.这种利用最小化误差的平方和来解决回归问题的方法叫最小二乘法(Least Square Method)。
1.由浅入深的介绍
2.神经网络(入门最详细)
3.神经网络层数及神经元数目的选择
4.关于BP神经网络中输入层、隐藏层、输出层节点数的讨论
matlab做法:
有关函数:
p = [2 5; 3 6; 12 2; 1 6; 9 2; 8 12; 4 7; 7 9]’; % 特征数据X1,X2 t = [10 18 24 6 18 96 28 63]; % 样本值 net = newff(p, t, 20); % 创建一个BP神经网络 ff=FeedForward net = train(net, p, t); % 用p,t数据来训练这个网络
存在的问题:(还在继续更新)
- 存在误差
- 有可能达不到预期效果
对策:
1.对隐藏层进行调整等
2.有时会出现局部最优解,可以多试几次