7つのニューラルネットワーク
機能の過度の数は、過剰な線形回帰アルゴリズムパラメータロジスティック回帰場合に、解決します
7.1 MPニューロンモデル
ニューロンは、ニューロンを送信する他のn個の入力信号を受信し、総入力値として加重和をニューロンの閾値と比較し、及び活性化関数処理収率ニューロン出力を介して、活性化関数はシグモイド関数であり、それがニューロンに設定されています機能、活性化関数として、典型的にはシグモイド関数
7.2パーセプトロン
最も単純なニューラルネットワークは、入力層のみが外部信号を受信し、出力層MPニューロンは、容易にルール学習重量パーセプトロン論理NOR演算を実現することができる
\ [w_i \ LEFTARROW w_i + \デルタw_iの\タグ{7.1} \ ]
\ [\デルタw_i = \ ETA(ガンマ\帽子{Y})X_Iの\タグ{7.2} \]
\(で\エータ\(0,1 )\) 例0.1のレート、通常は小さな正の数を学ぶと呼ばれ、
- 一つだけの機能ニューロンの学習能力は非常に限られており、唯一の非線形分離可能な問題を解決するために、非線形分離可能な問題、多機能ニューロンを解決するため、線形分離問題を解決することができません
画像は、ニューロンと呼ばれる入力層へのすべてのニューラルネットワークの出力層との間の前方上部多層フィードフォワードニューラル層示す中間層のない接続層ニューロンとを、クロスレイヤ接続が存在しない、次の層が完全に各々に接続され
入力層は、外部からの入力を受信するための唯一の原因である、隠れ層及び出力層ニューロン神経機能、信号処理、出力層ニューロンからの最終結果出力
- 限り、中間層が存在するように、多階層のネットワークを呼び出すことができます
- ニューラルネットワークの学習は、出力に応じて調整されるニューロン間の結合重みと各ニューロン機能のしきい値
- 順方向伝搬意味:1層目の入力キー活性化、隠れ層の活性化期間の計算が続き、最後の項は、出力層の出力の活性化に対応する計算され
- 若输入为布尔型,要实现逻辑运算给哪个输入乘参数为负的值,即期望哪个输入为非,调整各个参数达成不同线性组合的值来实现各种基于sigmoid激活函数的逻辑运算
- ==神经网络没有对样本特征进行学习,而是对样本特征与第一层参数计算出的激活项进行学习,比直接对原始输入学习能得出更好的模型参数==
- ==实际上神经网络是将原本的特征首先转化成更为复杂的复合特征,对该复合特征进行学习,得出基于复合特征的最优参数,同时更新复合特征中的原本特征的参数项,进而确定最优的特征复合项,即不断将原本特征逐层复杂化,再将隐含层所做的所有构建复杂特征的工作结果传到最后的输出层,由输出层利用这些复杂特征进行逻辑回归计算后,得出最后的值==
7.2.1 神经网络向量化计算
7.2.2 理解神经网络结构的经典例子
把相对简单的函数放于第二层,层数越高计算应越复杂,最后只有一种确定的放置方法,体现在参数经学习后会得出一最优值
7.2.3 多元分类
建立多个输出单元分别对应不同类别,一个为1时其余为0,实现多元分类,同时标签也由单个值变为多维向量,维数与类别个数相同
7.3 神经网络反向传播算法(BP)
7.3.1 准备用于神经网络的代价函数
- 前向传播用于计算各个参数值\(\theta\)
- 反向传播用于计算代价函数对于各个参数的偏导,把输出层的误差反向传播给第3层,再传给第2层
7.3.2 反向传播算法
训练集为{\((x^{(1)},y^{(1)}),...,(x^{(m)},y^{(m)})\)},设定\(\Delta_{i,j}^{(l)}=0\)(对于所有i,j,l),其中i代表第i个样本,j代表各层单元的序号,l代表层号
for i=1 to m遍历整个样本
\(a^{(1)}=x^{(i)}\)
用前向传播计算每层各个单元的a值
用\(y^{(i)}\)计算输出层误差\(\delta^{(L)}=a^{(L)}-y^{(i)}\)
再用反向传播计算每层的误差,\(\delta^{(L-1)},\delta^{(L-2,...,\delta^{(2)})}\),因为输入层为样本值,故无需计算误差\(\delta^{(1)}\)
各层的误差可表示为:\(\Delta_{i,j}^{(l)}:=\Delta_{i,j}^{(l)}+a_j^{(l)}\delta_i^{(l+1)}\)
行代表一个样本在某层所有单元的误差
遍历完所有样本后:
\[ \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} \]
其中\[ \frac{\partial}{\partial \Theta_{i j}^{(l)}} J(\Theta)=D_{i j}^{(l)} \]
7.3.3 神经网络理解
- 输入层各个单元代表输入单个样本的各个特征量
- 各个箭头汇聚的隐含层和输出层单元表示计算\(z=\theta a\),\(\theta\)为每条线代表的权重,a代表前一层各个单元的输出。每个单元内还需求z的sigmoid值作为假设函数,输出层即代表输出
- 若无K下标,则代价函数只代表输出单元为一个的情况
7.3.4 梯度检验
BP算法和梯度下降等算法一起工作可能会产生BUG导致虽然每次代价函数减小,但最后得到的结果误差会比无BUG情况下高出一个数量级。未避免该情况发生,需要进行 梯度检验
其中,EPSILON=10e-4,当这两个梯度近似相等时(只有几位数的差距),可认为DVec可用,当验证通过时,关闭梯度检验
7.3.5 随机初始化
若参数均初始化为0,则神经网络只可计算出一个特征,输入层每个单元引出的参数相等。
- 参数随机初始化的范围可由下式确定。
\[ \text{epsilon\_init}=\frac{\sqrt{6}}{\sqrt{输入层单元个数+输出层单元个数}}\tag{7.4} \]
7.3.6 总结
选取神经网络结构
输入层单元个数由样本的特征个数决定;输出层单元个数由所有区分的类别个数确定;一般选择单隐层,若选多个隐层,各层单元个数应相同,且总单元个数为输入层的几倍。通常层数越多越好,但计算量会加大。可用验证集对不同隐含层数的结构进行代价函数计算,选取最小代价的隐含层层数结构
训练神经网络
2.1 随机初始化权重为极小值
2.2 执行前向传播算法:\(x^{(i)}\rightarrow h_\theta(x^{(i)})\)
2.3 计算代价函数\(J(\theta)\)
2.4 执行反向传播算法,求出代价函数关于各个参数偏导:\(\frac{\partial}{\partial \Theta_{j k}^{(l)}} J(\Theta)\),即找出梯度下降方向
可用for循环计算每个样本也可向量化一次计算,开始建议用for循环,循环内包含了前向传播和反向传播
2.5 梯度检验,若正确则停止检验
2.6 使用优化方法,如梯度下降法,LBFGS,共轭梯度法,其他内置到fminunc函数中的方法,结合反向传播计算的偏 导,令代价函数逐步下降到最小
有可能收敛到局部最小值,但效果不错
7.4 其他常见神经网络
7.4.1 径向基函数网络(RBF)
单隐层前馈神经网络,与多层前馈神经网络隐含层使用sigmoid函数作为激活函数不同,RBF隐含层使用径向基函数作为隐层神经元激活函数,输出层是对隐层神经元输出的线性组合
7.4.2 自适应谐振理论网络(ART)
依靠竞争性学习的神经网络,网络的输出神经元相互竞争,每时刻仅有一个竞争获胜的神经元被激活,其余神经元状态被抑制
7.4.3 自组织映射网络(SOM)
竞争学习型无监督神经网络,将高维输入数据映射到低维空间,同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的邻近神经元
7.4.4 级联相关网络(CC)
典型的结构自适应网络,希望在训练过程中找到最符合数据特点的网络结构,一开始网络只有输入层和输出层,随着训练进行,新的隐层神经元逐渐加入,从而创建层级结构形成级联
最大化新神经元的输出与网络误差之间的相关性来训练相关的参数
7.4.5 递归神经网络(Elman)
允许网络中出现环形结构,隐层神经元的输出反馈回来作为输入信号,隐层神经元采用sigmoid激活函数,训练采用推广的BP算法
7.4.6 Boltzmann机
基于能量的模型,神经元都是布尔型,能量最小化时网络达到理想状态
7.5 神经网络结构与误差
貧しいフィッティング、大きな偏差、単純に計算しやすいいくつかの簡単なニューラルネットワーク・パラメータ、
複雑な神経回路網パラメータと過剰適合になりやすい、ばらつきが大きいが、正則は過学習を防ぐ修正することができ、簡単なニューラルネットワークmよりも優れた性能を兼ね備え