解决特征数量过多,线性回归与逻辑回归算法参数过多的情况
神经元接收其他n个神经元传递的输入信号,加权和作为总输入值,与神经元阈值比较,再通过激活函数处理产生神经元输出,激活函数为sigmoid函数,是设定在神经元上的函数,典型的激活函数为sigmoid函数
最简单的神经网络,输入层仅接收外界信号,输出层为M-P神经元,可容易实现逻辑与或非运算,感知机权重学习规则为
(7.1) w i ← w i + Δ w i w_i\leftarrow w_i+\Delta w_i\tag{7.1} wi←wi+Δwi(7.1)
(7.2) Δ w i = η ( y − y ^ ) x i \Delta w_i=\eta(y-\hat{y})x_i\tag{7.2} Δwi=η(y−y^)xi(7.2)
其中 η ∈ ( 0 , 1 ) \eta\in(0,1) η∈(0,1)称为学习率,一般为小的正数,例如0.1
上图为多层前馈神经网络,输出层与输入层之间的所有层神经元称为隐层,同层神经元不存在连接,不存在跨层连接,每层与下一层全互连
输入层仅负责接收外界输入,隐层与输出层神经元为功能神经元,对信号进行加工,最终结果由输出层神经元输出
把相对简单的函数放于第二层,层数越高计算应越复杂,最后只有一种确定的放置方法,体现在参数经学习后会得出一最优值
建立多个输出单元分别对应不同类别,一个为1时其余为0,实现多元分类,同时标签也由单个值变为多维向量,维数与类别个数相同
训练集为{ ( x ( 1 ) , y ( 1 ) ) , . . . , ( x ( m ) , y ( m ) ) (x^{(1)},y^{(1)}),...,(x^{(m)},y^{(m)}) (x(1),y(1)),...,(x(m),y(m))},设定 Δ i , j ( l ) = 0 \Delta_{i,j}^{(l)}=0 Δi,j(l)=0(对于所有i,j,l),其中i代表第i个样本,j代表各层单元的序号,l代表层号
for i=1 to m遍历整个样本
a ( 1 ) = x ( i ) a^{(1)}=x^{(i)} a(1)=x(i)
用前向传播计算每层各个单元的a值
用 y ( i ) y^{(i)} y(i)计算输出层误差 δ ( L ) = a ( L ) − y ( i ) \delta^{(L)}=a^{(L)}-y^{(i)} δ(L)=a(L)−y(i)
再用反向传播计算每层的误差, δ ( L − 1 ) , δ ( L − 2 , . . . , δ ( 2 ) ) \delta^{(L-1)},\delta^{(L-2,...,\delta^{(2)})} δ(L−1),δ(L−2,...,δ(2)),因为输入层为样本值,故无需计算误差 δ ( 1 ) \delta^{(1)} δ(1)
各层的误差可表示为: Δ i , j ( l ) : = Δ i , j ( l ) + a j ( l ) δ i ( l + 1 ) \Delta_{i,j}^{(l)}:=\Delta_{i,j}^{(l)}+a_j^{(l)}\delta_i^{(l+1)} Δi,j(l):=Δi,j(l)+aj(l)δi(l+1)
行代表一个样本在某层所有单元的误差
遍历完所有样本后:
(7.3) D i j ( l ) : = 1 m △ i j ( l ) + λ Θ i j ( l ) if j ≠ 0 D i j ( l ) : = 1 m △ i j ( l ) if j = 0 对 应 额 外 偏 差 项 \begin{array}{l}{D_{i j}^{(l)} :=\frac{1}{m} \triangle_{i j}^{(l)}+\lambda \Theta_{i j}^{(l)}\quad\text { if } j \neq 0} \\ {D_{i j}^{(l)} :=\frac{1}{m} \triangle_{i j}^{(l)} \quad \quad\quad\quad\text { if } j=0}对应额外偏差项\end{array}\tag{7.3} Dij(l):=m1△ij(l)+λΘij(l) if j̸=0Dij(l):=m1△ij(l) if j=0对应额外偏差项(7.3)
其中 ∂ ∂ Θ i j ( l ) J ( Θ ) = D i j ( l ) \frac{\partial}{\partial \Theta_{i j}^{(l)}} J(\Theta)=D_{i j}^{(l)} ∂Θij(l)∂J(Θ)=Dij(l)
BP算法和梯度下降等算法一起工作可能会产生BUG导致虽然每次代价函数减小,但最后得到的结果误差会比无BUG情况下高出一个数量级。未避免该情况发生,需要进行 梯度检验
其中,EPSILON=10e-4,当这两个梯度近似相等时(只有几位数的差距),可认为DVec可用,当验证通过时,关闭梯度检验
若参数均初始化为0,则神经网络只可计算出一个特征,输入层每个单元引出的参数相等。
选取神经网络结构
输入层单元个数由样本的特征个数决定;输出层单元个数由所有区分的类别个数确定;一般选择单隐层,若选多个隐层,各层单元个数应相同,且总单元个数为输入层的几倍。通常层数越多越好,但计算量会加大。可用验证集对不同隐含层数的结构进行代价函数计算,选取最小代价的隐含层层数结构
训练神经网络
2.1 随机初始化权重为极小值
2.2 执行前向传播算法: x ( i ) → h θ ( x ( i ) ) x^{(i)}\rightarrow h_\theta(x^{(i)}) x(i)→hθ(x(i))
2.3 计算代价函数 J ( θ ) J(\theta) J(θ)
2.4 执行反向传播算法,求出代价函数关于各个参数偏导: ∂ ∂ Θ j k ( l ) J ( Θ ) \frac{\partial}{\partial \Theta_{j k}^{(l)}} J(\Theta) ∂Θjk(l)∂J(Θ),即找出梯度下降方向
可用for循环计算每个样本也可向量化一次计算,开始建议用for循环,循环内包含了前向传播和反向传播
2.5 梯度检验,若正确则停止检验
2.6 使用优化方法,如梯度下降法,LBFGS,共轭梯度法,其他内置到fminunc函数中的方法,结合反向传播计算的偏 导,令代价函数逐步下降到最小
有可能收敛到局部最小值,但效果不错
单隐层前馈神经网络,与多层前馈神经网络隐含层使用sigmoid函数作为激活函数不同,RBF隐含层使用径向基函数作为隐层神经元激活函数,输出层是对隐层神经元输出的线性组合
依靠竞争性学习的神经网络,网络的输出神经元相互竞争,每时刻仅有一个竞争获胜的神经元被激活,其余神经元状态被抑制
竞争学习型无监督神经网络,将高维输入数据映射到低维空间,同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的邻近神经元
典型的结构自适应网络,希望在训练过程中找到最符合数据特点的网络结构,一开始网络只有输入层和输出层,随着训练进行,新的隐层神经元逐渐加入,从而创建层级结构形成级联
最大化新神经元的输出与网络误差之间的相关性来训练相关的参数
允许网络中出现环形结构,隐层神经元的输出反馈回来作为输入信号,隐层神经元采用sigmoid激活函数,训练采用推广的BP算法
基于能量的模型,神经元都是布尔型,能量最小化时网络达到理想状态
简单的神经网络参数少,易出现欠拟合,偏差大,计算简单
复杂的神经网络参数多,易出现过拟合,方差大,但可用正则化校正防止过拟合,结合起来性能比简单神经网络好m