目录

5.1 神经元模型

5.2感知机与多层网络

感知机

感知机模型

感知机学习策略

感知机学习算法

多层网络

5.3 误差逆传播算法

标准BP(误差逆传播)算法

变量符号

公式推导

工作流程

累积BP算法

5.4全局最小与局部极小

跳出局部极小的技术

5.5 其他常见神经网络

5.5.1 RBF网络

5.5.2 ART网络

5.5.3 SOM网络

5.5.4 级联相关网络

5.5.5 Elman网络

5.5.6 Boltzmann机

5.6 深度学习


5.1 神经元模型

神经网络定义: 由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应.

最基本成分(简单单元): 神经元(neuron)模型. (此时的bias被称作阈值θ, 权重在连接处赋予. )

M-P 神经元模型:

其中f为激活函数, 理想中一般对应阶跃函数, 实际常用Sigmoid函数:

一个神经网络模型, 由多个函数相互嵌套代入得.

5.2感知机与多层网络

感知机

感知机 (Perceptron): 由两层神经元组成, 输入层接收外界输入信号后传递给输出层, 输出层M-P 神经元,亦称"阈值逻辑单元" (threshold logic unit).

感知机实现逻辑与、或、非运算(输入x_i只有0-1), 其中激活函数为阶跃函数:

(1)“与”(y=x1∧x2)令w1=w2=1, θ=2

$$ x_1 $$

$$ x_2 $$

$$ h=1\cdot x_1+1\cdot x_2-2 $$

$$ y=f(h) $$

0

0

-2

0

0

1

-1

0

1

0

-1

0

1

1

0

1

(2)“或”(y=x1∨x2)令w1=w2=1, θ=0.5

$$ x_1 $$

$$ x_2 $$

$$ h=1\cdot x_1+1\cdot x_2-0.5 $$

$$ y=f(h) $$

0

0

-0.5

0

0

1

0.5

1

1

0

0.5

1

1

1

1.5

1

(3)“非”(y=¬x1,即与x2无关)令w1=-0.6, w2=0, θ=-0.5

$$ x_1 $$

$$ x_2 $$

$$ h=-0.6\cdot x_1+0\cdot x_2+0.5 $$

$$ y=f(h) $$

0

0

0.5

1

0

1

0.5

1

1

0

-0.1

0

1

1

-0.1

0

实际当中的参数w, θ一般通过训练集学习得到.

感知机模型

感知机由两层神经元组成,感知机模型的公式:

$$ y=f(\sum\limits_{i=1}^{n}w_ix_i-\theta)=f(\boldsymbol{w}^{\mathrm{T}}\boldsymbol{x}-\theta) $$

其中f通常设为符号函数sign.

n维空间中的超平面方程:

$$ w_1x_1+w_2x_2+\cdots+w_nx_n+b \\=\boldsymbol{w}^{\mathrm{T}}\boldsymbol{x} +b=0 $$

感知机模型公式中的w^T*x−θ可以看作n维空间中的超平面,它将n维空间划分为w^T*x-θ≥0和w^T*x-θ<0两个子空间,以此实现分类功能.

感知机学习策略

所求目标-对线性可分数据集T中的正负样本完全正确划分的超平面

$$ \boldsymbol{w}^{\mathrm{T}}\boldsymbol{x}-\theta=0 $$

误分类样本集合M⊆T,对任意一个误分类样本(x,y)∈M,当w^T x-θ≥0模型输出值为y hat=1 ,样本真实标记为y=0;反之,w^T x-θ<0模型输出值为y hat=0 ,样本真实标记为y=1. 两个因子始终同号, 单个样本损失>0恒成立:

$$ (\hat{y}-y)(\boldsymbol{w}^\mathrm{T}\boldsymbol{x}-\theta)\geq0 $$

损失函数(总损失):

$$ L(\boldsymbol{w},\theta)=\sum_{\boldsymbol{x}\in M}(\hat{y}-y)(\boldsymbol{w}^\mathrm{T}\boldsymbol{x}-\theta) $$

误分类点越少,误分类点离超平面越近,损失函数值就越小, 最小为0。L是关于w, θ的连续可导函数。

关于连续可导, 注意到损失函数中的y为间断函数, w^T x-θ为连续可导函数, y的分段点处w^T x-θ=0, 所以依然连续可导.

感知机学习算法

即求解损失函数最优化问题, 数据集:

$$ T=\{(\boldsymbol{x}_1,y_1),(\boldsymbol{x}_2,y_2),\dots,(\boldsymbol{x}_N,y_N)\}\\ 其中\boldsymbol{x}_i \in \mathbb{R}^n,y_i \in \{0,1\} $$

求参数w, θ,为极小化损失函数的解( M⊆T为误分类样本集合 ):

$$ \min\limits_{\boldsymbol{w},\theta}L(\boldsymbol{w},\theta)=\min\limits_{\boldsymbol{w},\theta}\sum_{\boldsymbol{x_i}\in M}(\hat{y}_i-y_i)(\boldsymbol{w}^\mathrm{T}\boldsymbol{x}_i-\theta) $$

将阈值θ看作固定输入为-1的“哑节点”:

$$ -\theta=-1\cdot w_{n+1}=x_{n+1}\cdot w_{n+1} $$

将θ吸收入w:

$$ \begin{aligned} \boldsymbol{w}^\mathrm{T}\boldsymbol{x_i}+(-1)\cdot \theta&=\sum \limits_{j=1}^n w_jx_j+x_{n+1}\cdot w_{n+1}\\ &=\sum \limits_{j=1}^{n+1}w_jx_j\\ &=\boldsymbol{w}^{\mathrm{T}}\boldsymbol{x_i} \end{aligned} $$

代入损失函数:

$$ \min\limits_{\boldsymbol{w}}L(\boldsymbol{w})=\min\limits_{\boldsymbol{w}}\sum_{\boldsymbol{x_i}\in M}(\hat{y}_i-y_i)\boldsymbol{w}^\mathrm{T}\boldsymbol{x_i} $$

损失函数梯度∇ L

$$ \nabla_{\boldsymbol{w}}L(\boldsymbol{w})=\sum_{\boldsymbol{x_i}\in M}(\hat{y}_i-y_i)\boldsymbol{x_i} $$

其中用到矩微分公式:

$$ \cfrac{\partial\boldsymbol{a}^{\mathrm{T}}\boldsymbol{x}}{\partial\boldsymbol{x}}=\cfrac{\partial\boldsymbol{x}^{\mathrm{T}}\boldsymbol{a}}{\partial\boldsymbol{x}}=\boldsymbol{a} $$

随机梯度下降法权重w更新公式:

$$ \boldsymbol w \leftarrow \boldsymbol w+\Delta \boldsymbol w\\ \Delta \boldsymbol w=-\eta(\hat{y}_i-y_i)\boldsymbol x_i=\eta(y_i-\hat{y}_i)\boldsymbol x_i $$

其中y hat为感知机的输出, η为学习率(learning rate).

相关知识:使用单个样本与整个训练集的算法区分

随机梯度下降SGD stochastic gradient descent

极小化过程中不是一次使M中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。

标准 BP 算法

每一轮迭代中每次仅依次针对一个训练样例更新连接权和阈值,读取训练集一遍称为进行了一轮(one round, one epoch)学习。参数更新得非常频繁,而且对不同样例进行更新的效果可能"抵消".

累积 BP算法

首先在范围内随机初始化网络中所有连接权v_ih和w_hj,以及阈值γ_h和θ_j,采用梯度下降直接针对累积误差最小化,读取整个训练集一遍后才对参数进行更新,其参数更新的频率低得多.但在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢.

标准梯度下降

一次使M中所有误分类点的梯度下降

多层网络

感知机只有一层功能神经元(functional neuron), 即输出层神经元, 进行激活函数处理. 与、或、非问题都是线性可分(linearly separable) 问题. 若两类模式是线性可分的,即存在一个线性超平面能将它们分开,感知机的学习w过程一定会收敛(converge), 否则学习过程震荡(fluctuation). 感知机不能解决非线性可分问题(如异或x1⊕x2):

非线性可分问题考虑多层功能神经元. 输出层与输入层之间的一层神经元,称为隐层或隐含层(hidden layer),隐含层\输出层神经元都是拥有激活函数的功能神经元.

两层感知机能解决异或问题.

实现“异或”计算的过程:

$$ x_1 $$

$$ x_2 $$

$$ h_1=1\cdot x_1+1\cdot x_2-0.5 $$

$$ h_2=(-1)\cdot x_1+(-1)\cdot x_2+1.5 $$

$$ y=f(h_1+h_2-1.5) $$

0

0

0

1

0

0

1

1

1

1

1

0

1

1

1

1

1

1

0

0

常见的神经网络为多层前馈神经网络 (multi-layer feedforward neural networks). 是层级结构,每层神经元与下层神经元全互连, 神经元之间不存在同层连接, 也不存在跨层连接. 其中, "前馈"指网络拓扑结构不存在环或回路.

其中输入层神经元仅是接受输入,不进行函数处理,隐层与输出层包含功能神经元. "两层网络"="单隐层网络". 神经网络"学"到的东西,蕴涵在连接权(connection weight)与阈值中,

5.3 误差逆传播算法

简单感知机学习规则(w<-w+Δw)不够. 训练多层网络,需要算法如BP(误差逆传播error BackPropagation) 算法进行训练. "BP 算法"可用于许多类型的神经网络, 但"BP 网络"指BP算法训练的多层前馈神经网络.

标准BP(误差逆传播)算法

单隐层为例

变量符号

输入层神经元个数

$$ d $$

输入层第i个神经元输入

$$ x_i $$

输入层第i个神经元 到 隐层第h个神经元的连接权

$$ v_{ih} $$

隐层神经元个数

$$ q $$

隐层第h个神经元输入

$$ \alpha_h=\sum^d_{i=1}v_{ih}x_i $$

隐层第h个神经元输出

$$ b_h=f(\alpha_h-\gamma_h), \gamma_h为阈值 $$

隐层第h个神经元 到 输出层第j个神经元的连接权

$$ w_{hj} $$

输出层神经元个数

$$ l $$

输出层第j个神经元输入

$$ \beta_j=\sum^q_{h=1}w_{hj}b_h $$

输出层第j个神经元输出

$$ \hat y_j=f(\beta_j-\theta_j), \theta_j为阈值 $$

训练集

$$ D=\{(\boldsymbol x_1,\boldsymbol y_1),(\boldsymbol x_2,\boldsymbol y_2),\cdots ,(\boldsymbol x_m,\boldsymbol y_m)\} $$

训练集中第k个样本

$$ (\boldsymbol x_k,\boldsymbol y_k)\\ 其中\boldsymbol x_k=(x^k_1,x^k_2,\cdots,x^k_d)\in \mathbb{R}^d,\boldsymbol y_k=(y^k_1,y^k_2,\cdots,y^k_d)\in \mathbb{R}^l $$

参数:

1. 输入层到隐层的d*q个权值v_ih

2. 隐层到输出层的q*l个权值w_hj

3. 隐层的q个神经元的阈值γ_h

4. 输出层的l个神经元的阈值θ_j

共(d+l+1)*q+l个参数需确定

超参数:

隐层的神经元个数q

训练轮数epoch

设隐层和输出层神经元f使用Sigmoid函数(即对率函数).

网络在样本(x_k, y_k)上的均方误差:

$$ E_k=\cfrac{1}{2} \sum\limits_{j=1}^{l}\left(\hat{y}_{j}^{k}-y_{j}^{k}\right)^{2} $$

任意参数v的更新估计式(同感知机):

$$ v\leftarrow v+\Delta v $$

参数的更新公式

$$\begin{aligned} \Delta w_{hj} &= -\eta \cfrac{\partial E_k}{\partial w_{hj}}\\ &=-\eta(-g_j  \cdot b_h)\\ &=\eta g_j b_h  \end{aligned}\\ \begin{aligned} \Delta \theta_j &= -\eta \cfrac{\partial E_k}{\partial \theta_j}=-\eta g_j\\ \Delta v_{ih} &=-\eta \cfrac{\partial E_k}{\partial v_{ih}} =\eta e_h x_i\\ \Delta \gamma_h&=-\eta\cfrac{\partial E_k}{\partial \gamma_h} = -\eta e_h\\ \end{aligned} $$

注意4个参数中v和γ的公式对j求和, θ和ω不用求和. 下标有j, 代表只与第j个输出神经元有关, 不影响每个输出神经元.

公式推导

基于梯度下降, 以目标的负梯度方向对(4种待定)参数调整(给定误差E_k, 学习率η):

$$ \Delta w_{hj} = -\eta \cfrac{\partial E_k}{\partial w_{hj}}\\ \Delta \theta_j = -\eta \cfrac{\partial E_k}{\partial \theta_j}\\ \Delta v_{ih} = -\eta \cfrac{\partial E_k}{\partial v_{ih}}\\ \Delta \gamma_h = -\eta \cfrac{\partial E_k}{\partial \gamma_h} $$

E对w求偏导的方法

根据函数关系: w_hj先影响到第j个输出层神经元的输入值β_j,再影响到其输出值hat y_j,然后影响到 E.

$$ E_k=\cfrac{1}{2} \sum\limits_{j=1}^{l}\left(\hat{y}_{j}^{k}-y_{j}^{k}\right)^{2}\\ \hat y_j=f(\beta_j-\theta_j)\\ \beta_j=\sum^q_{h=1}w_{hj}b_h\\  $$

完整依赖关系:

$$ \begin{array}{1} E_k\leftarrow \hat y_j&\leftarrow&\beta_j&\leftarrow &w_{hj}\\ &\nwarrow&&\nwarrow\\ & &\theta_j & &b_h&\leftarrow &\alpha_h\leftarrow v_{ih}\\ & & & & &\nwarrow \\ & & & & & &\gamma_h \end{array}  $$

考虑链式法则:

$$ \cfrac{\partial E_k}{\partial w_{hj}} =  \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial w_{hj}}  $$

其中β求导(只有第h项包含w_hj):

$$ \cfrac{\partial \beta_j}{\partial w_{hj}}=\cfrac{\sum^q_{h=1}w_{hj}b_h}{\partial w_{hj}}=b_h $$

Sigmoid 函数求导性质:

$$ \begin{aligned} f(x)&=\frac 1{1+e^{-x}}\\ f'(x)&=\frac {e^{-x}}{(1+e^{-x})^2}=\frac 1{1+e^{-x}}\frac {e^{-x}}{1+e^{-x}}=\frac 1{1+e^{-x}}\left(1-\frac 1{1+e^{-x}}\right)\\ &=f(x)(1-f(x)) \end{aligned} $$

神经网络有两层功能神经元,定义两个变量e_h, g_j. (若有多个隐层,需定义更多的变量,这些变量体现“误差逆传播”的含义,即误差E从后往前依次对各层功能神经元的输入求导. 其中g为E对输出层的输入β求导, e为E对隐层的输入α求导)

E对输出层的输入β求导,一个β只影响一个输出y:

$$ \begin{aligned} g_j&=-\frac{\partial {E_k}}{\partial{\beta_j}}\\ &=-\frac{\partial {E_k}}{\partial{\hat{y}_j^k}} \cdot \frac{\partial{\hat{y}_j^k}}{\partial{\beta_j}} \\  &=\hat{y}_j^k(1-\hat{y}_j^k)(y_j^k-\hat{y}_j^k)   \end{aligned} $$

E对隐层的输入α求导, 每个α影响一个隐藏层输出b, 一个b影响多个输出层的输入β(所以此处有对β的求和)

​​​​​​​

$$ \begin{aligned} e_h&=-\frac{\partial {E_k}}{\partial{b_h}}\cdot \frac{\partial{b_h}}{\partial{\alpha_h}} \\&=-\sum_{j=1}^l \frac{\partial {E_k}}{\partial{\beta_j}}\cdot \frac{\partial{\beta_j}}{\partial{b_h}}f^{\prime}(\alpha_h-\gamma_h) \\&=\sum_{j=1}^l w_{hj}g_j f^{\prime}(\alpha_h-\gamma_h) \\&=b_h(1-b_h)\sum_{j=1}^l w_{hj}g_j \end{aligned}  $$

将变量g与∂β/∂w代入∂E/∂w中:

$$ \begin{aligned}  \cfrac{\partial E_k}{\partial w_{hj}} &=  \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial w_{hj}} \\ &=\cfrac{\partial\left[ \cfrac{1}{2} \sum\limits_{j=1}^{l}\left(\hat{y}_{j}^{k}-y_{j}^{k}\right)^{2}\right]}{\partial \hat{y}_{j}^{k}} \cdot \cfrac{\partial [f(\beta_j-\theta_j)]}{\partial \beta_j}\cdot b_h\\  &=\cfrac{1}{2} 2(\hat{y}_j^k-y_j^k) \cdot f\left(\beta_{j}-\theta_{j}\right)\left[1-f\left(\beta_{j}-\theta_{j}\right)\right] \cdot b_h \\  &=-(y_j^k-\hat{y}_j^k) \cdot \hat{y}_j^k\left(1-\hat{y}_j^k\right) \cdot b_h \\  &=-g_j  \cdot b_h \end{aligned} $$

将∂E/∂w代入Δw得参数更新公式:

$$ \begin{aligned} \Delta w_{hj} &= -\eta \cfrac{\partial E_k}{\partial w_{hj}}\\ &=-\eta(-g_j  \cdot b_h)\\ &=\eta g_j b_h  \end{aligned} $$

同理, 其他参数的更新公式:

$$ \begin{aligned} \Delta \theta_j &= -\eta \cfrac{\partial E_k}{\partial \theta_j}=-\eta g_j\\ \Delta v_{ih} &=-\eta \cfrac{\partial E_k}{\partial v_{ih}} =\eta e_h x_i\\ \Delta \gamma_h&=-\eta\cfrac{\partial E_k}{\partial \gamma_h} = -\eta e_h\\ \end{aligned} $$

其中定义变量部分推导:

$$ \begin{aligned} \cfrac{\partial E_k}{\partial \theta_j} &= \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot\cfrac{\partial \hat{y}_j^k}{\partial \theta_j} \\ &= \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot\cfrac{\partial [f(\beta_j-\theta_j)]}{\partial \theta_j} \\ &=\cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot f^{\prime}(\beta_j-\theta_j) \times (-1) \\ &=\cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot f\left(\beta_{j}-\theta_{j}\right)\times\left[1-f\left(\beta_{j}-\theta_{j}\right)\right] \times (-1) \\ &=\cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \hat{y}_j^k\left(1-\hat{y}_j^k\right) \times (-1) \\ &=\cfrac{\partial\left[ \cfrac{1}{2} \sum\limits_{j=1}^{l}\left(\hat{y}_{j}^{k}-y_{j}^{k}\right)^{2}\right]}{\partial \hat{y}_{j}^{k}} \cdot \hat{y}_j^k\left(1-\hat{y}_j^k\right) \times (-1) \\ &=\cfrac{1}{2}\times 2(\hat{y}_j^k-y_j^k)\times 1 \cdot\hat{y}_j^k\left(1-\hat{y}_j^k\right) \times (-1) \\ &=(y_j^k-\hat{y}_j^k)\hat{y}_j^k\left(1-\hat{y}_j^k\right) \\ &= g_j \\ \cfrac{\partial E_k}{\partial v_{ih}} &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot \cfrac{\partial b_h}{\partial \alpha_h} \cdot \cfrac{\partial \alpha_h}{\partial v_{ih}} \\ &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot \cfrac{\partial b_h}{\partial \alpha_h} \cdot x_i \\ &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot f^{\prime}(\alpha_h-\gamma_h) \cdot x_i \\ &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot w_{hj} \cdot f^{\prime}(\alpha_h-\gamma_h) \cdot x_i \\ &= \sum_{j=1}^{l} (-g_j) \cdot w_{hj} \cdot f^{\prime}(\alpha_h-\gamma_h) \cdot x_i \\ &= -f^{\prime}(\alpha_h-\gamma_h) \cdot \sum_{j=1}^{l} g_j \cdot w_{hj} \cdot x_i\\ &= -b_h(1-b_h) \cdot \sum_{j=1}^{l} g_j \cdot w_{hj} \cdot x_i \\ &= -e_h \cdot x_i\\ \cfrac{\partial E_k}{\partial \gamma_h} &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot \cfrac{\partial b_h}{\partial \gamma_h} \\ &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot f^{\prime}(\alpha_h-\gamma_h) \cdot (-1) \\ &= -\sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot w_{hj} \cdot f^{\prime}(\alpha_h-\gamma_h)\\ &= -\sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot w_{hj} \cdot b_h(1-b_h)\\ &= \sum_{j=1}^{l}g_j\cdot w_{hj} \cdot b_h(1-b_h)\\ &=e_h  \end{aligned} $$

工作流程

学习率η∈(0, 1)(常设η=0.1)控制算法每一轮迭代中的更新步长,太大振荡,太小收敛慢. 不同参数可设不同学习率

每个训练样例, BP 算法迭代执行: 先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果; 然后计算输出层的误差(第4-5行) ,再将误差逆向传播至隐层神经元(第6行) ,

最后根据隐层神经元的误差调整连接权和阈值(第7行).

输入:训练集 D={( x_k, y_k)}^m_{k=1};

学习率 η.

过程:

1: (0, 1)范围内随机初始化网络中所有连接权和阈值

2: repeat

3:    for all (x_k , y_k)∈D do

4:           根据当前参数计算当前样本的输出y hat

5:           计算输出层神经元的梯度项g;

6:           计算隐层神经元的梯度项e;

7:           更新连接权w, v与阈值θ, γ

8:    end for

9: until 达到停止条件(如误差达很小值)

输出:连接权与阈值确定的多层前馈神经网络

累积BP算法

累积BP 算法目标: 最小化训练集D上的累积误差

$$ E=\frac{1}{m}\sum^m_{k=1} E_k $$

累积误差逆传播(accumulated error backpropagation)算法: 用类似标准BP的方法推导出基于累积误差最小化的更新规则.

实际使用: 累积 BP 算法读取整个训练集一遍(one round/epoch)后更新,参数更新频率低. 但累积误差下降到一定程度进一步下降缓慢,这时标准BP更快获得较好解,尤其训练集D大时.

隐层神经元个数设置: 实际应用常靠"试错法" (trial-by-error).

BP神经网络常过拟合, 缓解策略:

1. "早停" (early stopping): 若训练集误差降低, 但验证集误差升高, 则停止训练.

2. 正则化(regularization)(类似SVM): 误差目标函数中增加连接权, 阈值(描述网络复杂度, 使输出更光滑). 则误差目标函数:

$$ E=\lambda\frac{1}{m}\sum^m_{k=1} E_k+(1-\lambda)\sum_i w_i^2 $$

5.4全局最小与局部极小

神经网络的训练过程可看作,寻找一组最优参数使得误差E最小.

"局部极小" (local minimum): 其邻域点的误差函数值均不小于该点的函数值. 即梯度为零,误差函数值小于邻点.

"全局最小" (global minimum): 参数空间中所有点的误差函数值均不小于该点的误差函数值.

参数寻优方法: 从初始解出发, 迭代寻找. 每次迭代中,计算误差函数在当前点的梯度,梯度下降法沿着负梯度方向(函数值下降最快)搜索最优解. 若梯度为零,达到局部极小,更新量为零,参数迭代更新停止.

跳出局部极小的技术

1. 以多组不同参数值初始化多个神经网络, 取误差最小的解作为最终参数.

2. "模拟退火" (simulated annealing).每一步都以一定的概率接受更差结果. 接受"次优解"的概率逐渐降低, 从而保证算法稳定. (也会跳出全局最小)

3. 随机梯度下降法. 计算梯度时加入随机因素. 局部极小点梯度仍可能不为零.

4. 遗传算法(genetic algorithms)

5.5 其他常见神经网络

5.5.1 RBF网络

RBF(Radial Basis Function径向基函数)网络: 单隐层前馈神经网络

隐层神经元激活函数: 径向基函数

输出层: 隐层神经元输出的线性组合.

RBF网络表示(输入向量x为d维, 输出实值):

$$ \varphi (x)=\sum^q_{i=1}w_i\rho(\boldsymbol x,\boldsymbol c_i) $$

其中q为隐层神经元个数,c_i, w_i分别是第i个隐层神经元所对应的中心和权重,ρ是径向基函数,常定义为样本到数据中心c_i欧氏距离.

常用的高斯径向基函数(也可用别的径向基函数):

$$ \rho(\boldsymbol x,\boldsymbol c_i)=e^{-\beta_i\Vert\boldsymbol x-\boldsymbol c_i\Vert^2} $$

训练步骤:

1. (特征转换)随机采样、聚类等确定神经元中心c_i

2. (线性回归)BP等算法确定参数w, β

5.5.2 ART网络

属于竞争型学习网络, 结构自适应网络.

ART(Adaptive Resonance Theory,自适应谐振理论)网络: 由比较层、识别层、识别阈值和重置模块构成.

比较层负责接收输入样本, 传递给识别层神经元.

识别层每个神经元对应1个模式类(子类),训练过程中动态增长神经元数目(模式类). 识别层神经元之间相互竞争以产生获胜神经元.

竞争型学习 (competitive learning) : 无监督学习策略. 输出神经元相互竞争,每一时刻仅有一个获胜神经元被激活,其他神经元的状态被抑制. 即"胜者通吃" (winner-take-all) 原则.

竞争: 计算输入向量与每个识别层神经元所对应的模式类的代表向量之间的距离,距离最小者胜. 获胜神经元将向其他识别层神经元发送信号,抑制其激活. 相似度大于识别阔值,则样本将被归为该代表向量所属类别,更新连接权,使相似度更大. 若相似度不大于识别阈值,则重置模块在识别层增设一个新的神经元,其代表向量为当前输入向量.

识别阈值影响: 识别阈值较高, 模式类多、比较精细; 识别阈值较低, 模式类少、比较粗略.

APT优点: 具有可塑性(学习新知识的能力), 稳定性(保持对旧知识的记忆). 可进行增量学习 (incremental learning) 或在线学习 (online learning) .

5.5.3 SOM网络

SOM(Self-Organizing Map自组织映射)网络, 竞争学习型的无监督神经网络.

作用: 将高维输入数据映射到低维(2维)空间,同时保持数据拓扑结构,即高维空间中相似的样本点映射到网络输出层中的邻近神经元.

训练过程: 每个输出层神经元计算某样本与自身权向量距离,距离最近的神经元称为最佳匹配单元(best matching unit). 调整最佳匹配单元及其邻近神经元的权向量,缩小与当前输入样本的距离. 迭代该过程至收敛.

5.5.4 级联相关网络

级联相关(Cascade-Correlation)为结构自适应(constructive)网络: 网络结构也为学习目标.

训练过程: 新的隐结点加入时,红色连接权通过最大化新结点的输出与网络误差之间的相关性来进行训练.

级联: 建立层次连接的层级结构.

相关: (红色连接权) 最大化新结点的输出与网络误差之间的相关性(correlation)来训练参数.

级联相关网络无需设置网络层数、隐层神经元数目,且训练速度较快,但其在数据较小时易 过拟合.

5.5.5 Elman网络

"递归神经网络" RNN(recurrent neural networks) 允许网络中出现环形结构,神经元的输出反馈回来作为输入信号.

Elman隐层神经元的输出被反馈回来, 与下一时刻输入层神经元提供的信号一起,作为隐层神经元在下一时刻的输入.

网络在t时刻的输出状态不仅与t时刻的输入有关, 还与t-1时刻的网络状态有关,能处理与时间有关的动态变化.

RNN 进一步演进就是长短时间记忆(Long Short-Term Memory, LSTM)网络。此类网络结构善长于处理时序信号,比如语音.

5.5.6 Boltzmann机

更多深入内容可参考: https://zhuanlan.zhihu.com/p/22794772

属于递归神经网络, 基于能量的模型 (energy-based model), 能量函数最小化代表网络状态最好.

神经元分为两层: 显层与隐层. 显层用于数据的输入与输出,隐层为数据的内在表达. Boltzmann 机中的神经元都是布尔型, 状态1表示激活, 状态0表示抑制.

标准的Boltzmann机是一个全连接图,现实中常用受限的Boltzmann(Restricted Boltzmann Machine)即RBM仅保留显层与隐层之间的连接.

相关知识: 二部图. 图中每条边依附的两个顶点都分属于这两个互不相交的子集

令向量s表示n个神经元的状态,w_ij表示神经元i, j之间连接权,θ_i表示神经元i阈值,则状态向量s所对应的能量定义:

$$ E(\boldsymbol{s})=-\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}w_{ij}s_is_j-\sum_{i=1}^n\theta_is_i $$

本质上是一个引入了隐变量的无向图模型,无向图的能量:

$$ E_{graph}=E_{edges}+E_{nodes}\\ E_{edges}=\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}E_{{edge}_{ij}}=-\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}w_{ij}s_is_j\\ E_{nodes}=\sum_{i=1}^nE_{{node}_i}=-\sum_{i=1}^n\theta_is_i $$

Boltzmann 分布,状态向量s出现的概率(这个t不知道哪来的):

$$ P(\boldsymbol{s})=\frac{e^{-E(\boldsymbol{s})}}{\sum_te^{-E(\boldsymbol{t})}} $$

其中规范化因子, 即配分函数(Partition Function):

$$ Z=\sum_te^{-E(\boldsymbol{t})}\\ P(\boldsymbol{s})=\frac{e^{-E(\boldsymbol{s})}}{Z} $$

训练过程将每个训练样本视为一个状态向量,使其出现的概率尽可能大. RBM训练使用算法: 对比散度CD (Contrastive Divergence):

设显层神经元d个, 隐层神经元q个,显层状态向量v, 隐层状态向量h,同层内无连接, 即v与h相关, 但v_1…v_d相互独立. 根据概率论独立事件公式, v_1…v_d同时发生等于两个事件发生概率的乘积.

$$ P(\boldsymbol{v}|\boldsymbol{h})=\prod_{i=1}^dP(v_i\, | \, \boldsymbol{h})\\ P(\boldsymbol{h}|\boldsymbol{v})=\prod_{j=1}^qP(h_i\, | \, \boldsymbol{v}) $$

CD算法对每个训练样本v,计算隐层神经元状态的概率分布P(h|v),根据P(h|v)概率分布采样得h; 然后根据P(v|h)从h产生v', 从v'产生h'.

根据能量公式E(s)代入v, h:

$$ E(\boldsymbol{v},\boldsymbol{h})=-\sum_{i=1}^d\sum_{j=1}^qw_{ij}v_ih_j-\sum_{i=1}^d\alpha_iv_i-\sum_{j=1}^q\beta_jh_j $$

代入W可化为向量形式:

$$ \mathbf{W}=\begin{bmatrix} \boldsymbol{w}_1\\ \boldsymbol{w}_2\\ \vdots\\ \boldsymbol{w}_q \end{bmatrix}\in \mathbb{R}^{q*d}\\ E(\boldsymbol{v},\boldsymbol{h})=-\boldsymbol{h}^{\mathrm{T}}\mathbf{W}\boldsymbol{v}-\boldsymbol{\alpha}^{\mathrm{T}}\boldsymbol{v}-\boldsymbol{\beta}^{\mathrm{T}}\boldsymbol{h} $$

类似地, 联合概率分布公式P(s)代入v, h:

$$ P(\boldsymbol{v},\boldsymbol{h})=\frac{1}{Z}e^{-E(\boldsymbol{v},\boldsymbol{h})} $$

对于数据集V, 记参数为θ:

$$ \boldsymbol{\theta}=\{\mathbf{W},\boldsymbol{\alpha},\boldsymbol{\beta}\} $$

目的是求最优θ, 使对数似然函数L最大化

首先对L整理:

$$ \begin{aligned} L(\boldsymbol{\theta})&=\ln\left(\prod_{k=1}^{m}P(\boldsymbol{v}_k)\right) \\ &=\sum_{k=1}^m\ln P(\boldsymbol{v}_k) \\ &= \sum_{k=1}^m L_k(\boldsymbol{\theta})\\ L_k(\boldsymbol{\theta})&=\ln P(\boldsymbol{v}_k) \\&=\ln\left(\sum_{\boldsymbol{h}}P(\boldsymbol{v}_k,\boldsymbol{h})\right) \\&=\ln\left(\sum_{\boldsymbol{h}}\frac{1}{Z}e^{-E(\boldsymbol{v}_k,\boldsymbol{h})}\right) \\&=\ln\left(\sum_{\boldsymbol{h}}e^{-E(\boldsymbol{v}_k,\boldsymbol{h})}\right)-\ln Z \\&=\ln\left(\sum_{\boldsymbol{h}}e^{-E(\boldsymbol{v}_k,\boldsymbol{h})}\right)-\ln\left(\sum_{\boldsymbol{v},\boldsymbol{h}}e^{-E({\boldsymbol{v},\boldsymbol{h})}}\right) \end{aligned} $$

最大化用的是梯度上升法, 求L梯度:

梯度计算可以参考这个视频(能不能看懂全看造化):

https://www.bilibili.com/video/BV1kJ41127aD?p=2

根据复合函数求导公式

$$ \begin{aligned} \frac{\partial{L_k(\boldsymbol{\theta})}}{\partial{\boldsymbol{\theta}}}&=\frac{\partial}{\partial{\boldsymbol{\theta}}}\left[\ln\sum_{\boldsymbol{h}}e^{-E(\boldsymbol{v}_k,\boldsymbol{h})}\right]-\frac{\partial}{\partial{\boldsymbol{\theta}}}\left[\ln\sum_{\boldsymbol{v},\boldsymbol{h}}e^{-E({\boldsymbol{v},\boldsymbol{h})}}\right] \\&=-\frac{\sum_{\boldsymbol{h}}e^{-E(\boldsymbol{v}_k,\boldsymbol{h})}\frac{\partial{E({\boldsymbol{v}_k,\boldsymbol{h})}}}{\partial{\boldsymbol{\theta}}}}{\sum_{\boldsymbol{h}}e^{-E(\boldsymbol{v}_k,\boldsymbol{h})}}+\frac{\sum_{\boldsymbol{v},\boldsymbol{h}}e^{-E(\boldsymbol{v},\boldsymbol{h})}\frac{\partial{E({\boldsymbol{v},\boldsymbol{h})}}}{\partial{\boldsymbol{\theta}}}}{\sum_{\boldsymbol{v},\boldsymbol{h}}e^{-E(\boldsymbol{v},\boldsymbol{h})}} \\&=-\sum_{\boldsymbol{h}}\frac{e^{-E(\boldsymbol{v}_k,\boldsymbol{h})}\frac{\partial{E({\boldsymbol{v}_k,\boldsymbol{h})}}}{\partial{\boldsymbol{\theta}}}}{\sum_{\boldsymbol{h}}e^{-E(\boldsymbol{v}_k,\boldsymbol{h})}}+\sum_{\boldsymbol{v},\boldsymbol{h}}\frac{e^{-E(\boldsymbol{v},\boldsymbol{h})}\frac{\partial{E({\boldsymbol{v},\boldsymbol{h})}}}{\partial{\boldsymbol{\theta}}}}{\sum_{\boldsymbol{v},\boldsymbol{h}}e^{-E(\boldsymbol{v},\boldsymbol{h})}} \end{aligned} $$

代入概率公式P即为:

$$ \frac{e^{-E({\boldsymbol{v}_k,\boldsymbol{h})}}}{\sum_{\boldsymbol{h}}e^{-E({\boldsymbol{v}_k,\boldsymbol{h})}}}=\frac{\frac{e^{-E({\boldsymbol{v}_k,\boldsymbol{h})}}}{Z}}{\frac{\sum_{\boldsymbol{h}}e^{-E({\boldsymbol{v}_k,\boldsymbol{h})}}}{Z}}=\frac{\frac{e^{-E({\boldsymbol{v}_k,\boldsymbol{h})}}}{Z}}{\sum_{\boldsymbol{h}}\frac{e^{-E({\boldsymbol{v}_k,\boldsymbol{h})}}}{Z}}=\frac{P(\boldsymbol{v}_k,\boldsymbol{h})}{\sum_{\boldsymbol{h}}P(\boldsymbol{v}_k,\boldsymbol{h})}=P(\boldsymbol{h}|\boldsymbol{v}_k)\\ \frac{e^{-E({\boldsymbol{v},\boldsymbol{h})}}}{\sum_{\boldsymbol{v},\boldsymbol{h}}e^{-E({\boldsymbol{v},\boldsymbol{h})}}}=\frac{\frac{e^{-E({\boldsymbol{v},\boldsymbol{h})}}}{Z}}{\frac{\sum_{\boldsymbol{v},\boldsymbol{h}}e^{-E({\boldsymbol{v},\boldsymbol{h})}}}{Z}}=\frac{\frac{e^{-E({\boldsymbol{v},\boldsymbol{h})}}}{Z}}{\sum_{\boldsymbol{v},\boldsymbol{h}}\frac{e^{-E({\boldsymbol{v},\boldsymbol{h})}}}{Z}}=\frac{P(\boldsymbol{v},\boldsymbol{h})}{\sum_{\boldsymbol{v},\boldsymbol{h}}P(\boldsymbol{v},\boldsymbol{h})}=P(\boldsymbol{v},\boldsymbol{h})\\ \begin{aligned} \frac{\partial{L_k(\boldsymbol{\theta})}}{\partial{\boldsymbol{\theta}}}&=-\sum_{\boldsymbol{h}}P(\boldsymbol{h}|\boldsymbol{v}_k)\frac{\partial{E({\boldsymbol{v}_k,\boldsymbol{h})}}}{\partial{\boldsymbol{\theta}}}+\sum_{\boldsymbol{v},\boldsymbol{h}}P(\boldsymbol{v},\boldsymbol{h})\frac{\partial{E({\boldsymbol{v},\boldsymbol{h})}}}{\partial{\boldsymbol{\theta}}} \\&=-\sum_{\boldsymbol{h}}P(\boldsymbol{h}|\boldsymbol{v}_k)\frac{\partial{E({\boldsymbol{v}_k,\boldsymbol{h})}}}{\partial{\boldsymbol{\theta}}}+\sum_{\boldsymbol{v}}\sum_{\boldsymbol{h}}P(\boldsymbol{v})P(\boldsymbol{h}|\boldsymbol{v})\frac{\partial{E({\boldsymbol{v},\boldsymbol{h})}}}{\partial{\boldsymbol{\theta}}} \\&=-\sum_{\boldsymbol{h}}P(\boldsymbol{h}|\boldsymbol{v}_k)\frac{\partial{E({\boldsymbol{v}_k,\boldsymbol{h})}}}{\partial{\boldsymbol{\theta}}}+\sum_{\boldsymbol{v}}P(\boldsymbol{v})\sum_{\boldsymbol{h}}P(\boldsymbol{h}|\boldsymbol{v})\frac{\partial{E({\boldsymbol{v},\boldsymbol{h})}}}{\partial{\boldsymbol{\theta}}} \end{aligned} $$

θ中参数众多, 以w_ij为例对L求偏导(其中ΣP看作常数):

$$ \begin{aligned} &\sum_{\boldsymbol{h}}P(\boldsymbol{h}|\boldsymbol{v})\frac{\partial{E({\boldsymbol{v},\boldsymbol{h})}}}{\partial{w_{ij}}}\\ =&-\sum_{\boldsymbol{h}}P(\boldsymbol{h}|\boldsymbol{v})h_iv_j\\ =&-\sum_{\boldsymbol{h}}\prod_{l=1}^{q}P(h_l|\boldsymbol{v})h_iv_j\\ =&-\sum_{\boldsymbol{h}}P(h_i|\boldsymbol{v})\prod_{l=1,l\neq i}^{q}P(h_l|\boldsymbol{v})h_iv_j\\ =&-\sum_{\boldsymbol{h}}P(h_i|\boldsymbol{v})P(h_1,...,h_{i-1},h_{i+1},...,h_q|\boldsymbol{v})h_iv_j\\ =&-\sum_{h_i}P(h_i|\boldsymbol{v})h_iv_j\sum_{h_1,...,h_{i-1},h_{i+1},...,h_q}P(h_1,...,h_{i-1},h_{i+1},...,h_q|\boldsymbol{v}) \end{aligned} $$

注意此处因为hi已经取定了,求和遍历所有的h1,h2,...h_{i-1},h_{i+1},...hq,相当于求所有条件概率的和, 提出来为1:

$$ \begin{aligned} &\sum_{\boldsymbol{h}}P(\boldsymbol{h}|\boldsymbol{v})\frac{\partial{E({\boldsymbol{v},\boldsymbol{h})}}}{\partial{w_{ij}}}\\ =&-\sum_{h_i}P(h_i|\boldsymbol{v})h_iv_j\cdot 1\\ =&-\left[P(h_i=0|\boldsymbol{v})\cdot0\cdot v_j+P(h_i=1|\boldsymbol{v})\cdot 1\cdot v_j\right]\\ =&-P(h_i=1|\boldsymbol{v})v_j \end{aligned} $$

代回∂L/ ∂w得:

$$ \Delta w_{ij}=\frac{\partial{L_k(\boldsymbol{\theta})}}{\partial{w_{ij}}}=P(h_i=1|\boldsymbol{v}_k){v_{j}^k}-\sum_{\boldsymbol{v}}P(\boldsymbol{v})P(h_i=1|\boldsymbol{v})v_j $$

连接权的更新公式:

$$ \Delta w=\eta(\boldsymbol{v}\boldsymbol{h}^\mathrm{T}-\boldsymbol{v}’\boldsymbol{h}’^{\mathrm{T}}) $$

5.6 深度学习

参数越多的模型复杂度越高、 "容量" (capacity) 越大. 计算能力提高缓解训练低效性,训练数据增加降低过拟合风险,

增加模型复杂度,增加隐层的数目比增加隐层神经元的数目更有效. 因为增加隐层数不仅增加拥有功能神经元数目, 还增加激活函数嵌套的层数.

多隐层神经网络难以直接用经典算法, 因误差在多隐层内逆传播时, 往往会"发散" (diverge).

解决手段:

1. 无监督逐层训练(unsupervised layer-wise training). "预训练" (pre-training)每次训练一层隐结点, 再对整个网络进行"微调" (fine tuning)训练. 即局部较优的结果联合起来远行全局寻优. 如深度信念网DBN(deep belief network).

2. "权共享" (weight sharing),即让一组神经元使用相同的连接权. 如卷积神经网络CNN (Convolutional Neural Network).

多隐层神经网络逐层求导(连乘)过程中易导致梯度爆炸和梯度消失. 一般将Sigmoid 函数替换为修正线性函数ReLU. Sigmoid函数由于其值域处于(0,-1), 故梯度消失问题比较严重.

深度学习可理解为进行特征学习(feature learning) 表示学习(representation learning). 实现端到端(end-to-end)的学习, 输入就是原始的图片像素值,输出就是分类结果.

西瓜书笔记5:神经网络相关推荐

  1. 机器学习西瓜书笔记:神经网络:BP算法公式推导

    1.变量符号含义 1.训练集D={(x⃗1,y⃗1),(x⃗2,y⃗2),...,(x⃗m,y⃗m)}D = \{(\vec{x}_1, \vec{y}_1), (\vec{x}_2, \vec{y} ...

  2. 西瓜书学习记录-神经网络(第五章)

    西瓜书学习记录-神经网络(第五章) 第五章啦,大佬的视频没讲第五章,所以看书自学一下: 书籍来自周志华的<机器学习>.

  3. 西瓜书笔记系列 - 第1章 绪论 - 1.1 引言

    西瓜书笔记系列 - 目录 1.1 引言   人们能做出有效的预判,是因为人们已经积累了许多经验,而通过对经验的利用,就能对新情况做出有效的决策.   对于计算机而言,机器学习正是这样一门学科,它致力于 ...

  4. 读西瓜书笔记(一)绪论

    读西瓜书笔记(一)绪论 (一)什么是机器学习 机器学习致力于研究如何通过计算的手段,利用经验来改善自身的性能. 机器学习所研究的主要内容,是关于在计算机上从数据中产生"模型"的算法 ...

  5. 西瓜书笔记7:贝叶斯分类器

    目录 相关概率知识 贝叶斯-全概率公式 先验概率.后验概率.似然概率 7.1 贝叶斯决策论 7.2 极大似然估计 极大似然估计公式 均值方差估计公式推导 概率知识复习 高斯分布 最大似然估计 7.3 ...

  6. 西瓜书笔记3: 线性模型

    目录 3.1 基本形式 3.2 线性回归 情形1, 输入属性只有1个 情形2, 样本属性d个, 多元线性回归 线性模型变化, 广义线性模型 3.3对数几率回归 对数几率函数 对数几率回归 参数估计-极 ...

  7. 西瓜书笔记之 模型评估与选择

    讲真,这书是越看觉得自己不会的越多,感觉好多概念,完全不是理工男喜欢的样子.. 首先了解一下NP问题,机器学习面临的问题多是NP完全问题(NP-C问题),号称世界七大数学难题之一. NP的英文全称是N ...

  8. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY16-强化学习

    文章目录 16.1 任务与奖赏 RL与有监督学习.无监督学习的比较 形象举例 16.2 K-摇臂赌博机 ε-贪心算法 16.3 有模型学习 16.4 免模型学习 16.5 值函数近似 16.6 模仿学 ...

  9. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY11-特征选择和稀疏学习

    特征工程是机器学习中非常重要的一个环节,它的好坏直接影响了机器学习效果的优劣.而特征工程里非常关键的一步就是特征选择. 如果把机器学习比作是一个厨师做菜的过程,那么数据就是原材料(菜),模型可以理解为 ...

最新文章

  1. python中dtypes_关于python:如何通过pandas DataFrame中的列设置dtypes
  2. 关于网上cython书籍的调研
  3. java中匿名类的注意细节
  4. 在Java中从字符串转换为双精度
  5. el-table 行背景颜色_使用HTML添加表格4(行颜色与表格嵌套)——零基础自学网页制作
  6. mysql一列数据转为一行_MySQL高性能优化规范建议,速度收藏
  7. Linux-yum在线安装svn步骤
  8. 电脑rar文件打开方式_怎么压缩文件,如何压缩文件?压缩软件哪个好?
  9. Linux之解决终端关闭,程序停止运行问题
  10. python在屏幕上画画,屏幕上的Python绘图
  11. 使用xcap进行更改报文并进行回放以及回放报文只能看到请求流量看不到响应流量的问题
  12. python一帧一帧读取视频_如何使用openCV和python从流中逐帧获取视频
  13. 联通BSS-ESS-CBSS系统安装相关
  14. android 解压相关问题,解压文件失败的情况
  15. 毕业设计超市进销存管理系统源码
  16. 银河帝国----基地
  17. 逆向某停车app(原创)
  18. GIS开发:QGIS编辑矢量数据
  19. TIA博途中如何设计报警功能块FB,来简化编写离散量报警程序的时间?
  20. 软件架构师-论文写作要求-摘要-扣分原则-加分原则-不及格

热门文章

  1. doxygen简单介绍
  2. 转:绝对论坛元老,05年注册。告诉你一个真实的魅族
  3. [Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)
  4. 梦想太远,现实太近 3
  5. kylin调优,项目中错误总结,知识点总结,kylin jdbc driver + 数据库连接池druid + Myba
  6. 〔转载〕从蓝色巨人到四海一家 IBM品牌塑造及转型
  7. tf2加载图片数据集并训练
  8. 视频号的直播玩法,手把手教你直播带货:国仁楠哥
  9. 中投民生:股市实战小技巧,股民必看
  10. 销售宝:ERP软件系统对于企业有什么帮助?