神经网络

一、生物学上的神经网络

神经网络是由神经元组成的,在生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个“阈值”,那么它就会被激活,即“兴奋”起来,再向其他神经元发送化学物质。

二、神经元模型

1943 年,McCulloch 和 Pitts 将上述情形抽象为 M-P 神经元模型。神经元接收来自 n 个其他神经元传递过来的输入信号 x,这些输入信号通过带权重 w 的连接进行传递,神经元接收到的总输入值 ∑ i = 1 n w i x i \sum_{i=1}^{n}w_ix_i i=1nwixi,将与神经元的阈值 θ 进行比较,然后通过“激活函数”f 处理产生神经元的输出: y = f ( ∑ i = 1 n w i x i − θ ) y=f(\sum_{i=1}^{n}w_ix_i-θ) y=f(i=1nwixiθ)
M-P 神经元模型:

在上面的神经元模型中,包含两层神经元(输入层和输出层),只拥有一层功能神经元(因为只有输出层神经元进行激活函数处理)。回想逻辑回归,和上面的模型是非常相似的,其中激活函数是Sigmoid函数:

三、神经网络模型与前向传播

如果在此基础上加一层隐藏层,就构成了浅层神经网络(三层:输入层、隐藏层、输出层):
在这里插入图片描述
标上“+1”的圆圈被称为偏置节点,也就是截距项。没有其他单元连向偏置单元(即偏置单元没有输入),因为它们总是输出 +1。
我们用 n l n_l nl来表示网络的层数,本例中 n l = 3 n_l=3 nl=3 ,我们将第 l l l层记为 L l L_l Ll,于是 L 1 L_1 L1是输入层,输出层是 L n l L_{n_l} Lnl 。 本例神经网络有参数 ( W , b ) = ( W ( 1 ) , b ( 1 ) , W ( 2 ) , b ( 2 ) ) (W,b) = (W^{(1)}, b^{(1)}, W^{(2)}, b^{(2)}) (W,b)=(W(1),b(1),W(2),b(2)),其中 W i j ( l ) W^{(l)}_{ij} Wij(l) (下面的式子中用到)是第 l l l层第j单元与第 l + 1 l+1 l+1层第i单元之间的联接参数(其实就是连接线上的权重,注意标号顺序), b i ( l ) b^{(l)}_i bi(l) 是第 l + 1 l+1 l+1层第i单元的偏置项。因此在本例中, W ( 1 ) ∈ ℜ 3 × 3 W^{(1)} \in \Re^{3\times 3} W(1)3×3 W ( 2 ) ∈ ℜ 1 × 3 W^{(2)} \in \Re^{1\times 3} W(2)1×3。我们用 s l s_l sl 表示第 l l l层的节点数(偏置单元不计在内)。

你也许会问,为什么权重的标号为什么要这样设计?这主要是为了便于模型用于矩阵表示运算,将输出的索引放在前面的话,则线性运算不用转置,即直接为 w x + b wx+b wx+b

我们用 a i ( l ) a^{(l)}_i ai(l)表示第 l l l层第i单元的激活值(输出值)。当 l = 1 l=1 l=1时, a i ( 1 ) = x i a^{(1)}_i = x_i ai(1)=xi,也就是第i个输入值(输入值的第i个特征)。对于给定参数集合W,b,我们的神经网络就可以按照函数 h W , b ( x ) h_{W,b}(x) hW,b(x)来计算输出结果。本例神经网络的计算步骤如下:
a 1 ( 2 ) = f ( W 11 ( 1 ) x 1 + W 12 ( 1 ) x 2 + W 13 ( 1 ) x 3 + b 1 ( 1 ) ) a 2 ( 2 ) = f ( W 21 ( 1 ) x 1 + W 22 ( 1 ) x 2 + W 23 ( 1 ) x 3 + b 2 ( 1 ) ) a 3 ( 2 ) = f ( W 31 ( 1 ) x 1 + W 32 ( 1 ) x 2 + W 33 ( 1 ) x 3 + b 3 ( 1 ) h W , b ( x ) = a 1 ( 3 ) = f ( W 11 ( 2 ) a 1 ( 2 ) + W 12 ( 2 ) a 2 ( 2 ) + W 13 ( 2 ) a 3 ( 2 ) + b 1 ( 2 ) ) a_1^{(2)}= f(W_{11}^{(1)}x_1 + W_{12}^{(1)} x_2 + W_{13}^{(1)} x_3 + b_1^{(1)})\\ a_2^{(2)}= f(W_{21}^{(1)}x_1 + W_{22}^{(1)} x_2 + W_{23}^{(1)} x_3 + b_2^{(1)})\\ a_3^{(2)} = f(W_{31}^{(1)}x_1 + W_{32}^{(1)} x_2 + W_{33}^{(1)} x_3 + b_3^{(1)}\\ h_{W,b}(x) = a_1^{(3)} = f(W_{11}^{(2)}a_1^{(2)} + W_{12}^{(2)} a_2^{(2)} + W_{13}^{(2)} a_3^{(2)} + b_1^{(2)}) a1(2)=f(W11(1)x1+W12(1)x2+W13(1)x3+b1(1))a2(2)=f(W21(1)x1+W22(1)x2+W23(1)x3+b2(1))a3(2)=f(W31(1)x1+W32(1)x2+W33(1)x3+b3(1)hW,b(x)=a1(3)=f(W11(2)a1(2)+W12(2)a2(2)+W13(2)a3(2)+b1(2))

我们用 z i ( l ) z^{(l)}_i zi(l)表示第 l l l层第 i i i单元输入加权和(包括偏置单元),比如, z i ( 2 ) = ∑ j = 1 n W i j ( 1 ) x j + b i ( 1 ) z_i^{(2)} = \sum_{j=1}^n W^{(1)}_{ij} x_j + b^{(1)}_i zi(2)=j=1nWij(1)xj+bi(1),则 a i ( l ) = f ( z i ( l ) ) a^{(l)}_i = f(z^{(l)}_i) ai(l)=f(zi(l))

这样我们就可以得到一种更简洁的表示法。这里我们将激活函数 f ( ⋅ ) f(\cdot) f()扩展为用向量来表示,即 f ( [ z 1 , z 2 , z 3 ] ) = [ f ( z 1 ) , f ( z 2 ) , f ( z 3 ) ] f([z_1, z_2, z_3]) = [f(z_1), f(z_2), f(z_3)] f([z1,z2,z3])=[f(z1),f(z2),f(z3)],那么,上面的等式可以更简洁地表示为:
z ( 2 ) = W ( 1 ) x + b ( 1 ) a ( 2 ) = f ( z ( 2 ) ) z ( 3 ) = W ( 2 ) a ( 2 ) + b ( 2 ) h W , b ( x ) = a ( 3 ) = f ( z ( 3 ) ) z^{(2)} = W^{(1)} x + b^{(1)}\\ a^{(2)} = f(z^{(2)})\\ z^{(3)} = W^{(2)} a^{(2)} + b^{(2)}\\ h_{W,b}(x) = a^{(3)} = f(z^{(3)}) z(2)=W(1)x+b(1)a(2)=f(z(2))z(3)=W(2)a(2)+b(2)hW,b(x)=a(3)=f(z(3))
我们将上面的计算步骤叫作前向传播。回想一下,之前我们用 a ( 1 ) = x a^{(1)} = x a(1)=x表示输入层的激活值,那么给定第 l l l层的激活值 a ( l ) a^{(l)} a(l)后,第 l + 1 l+1 l+1层的激活值 a ( l + 1 ) a^{(l+1)} a(l+1)就可以按照下面步骤计算得到:
z ( l + 1 ) = W ( l ) a ( l ) + b ( l ) a ( l + 1 ) = f ( z ( l + 1 ) ) z^{(l+1)} = W^{(l)} a^{(l)} + b^{(l)} \\ a^{(l+1)} = f(z^{(l+1)}) z(l+1)=W(l)a(l)+b(l)a(l+1)=f(z(l+1))

将参数矩阵化,使用矩阵-向量运算方式,我们就可以利用线性代数的优势对神经网络进行快速求解。

如果包含多个隐藏层的神经网络(深度神经网络DNN),可以按照之前描述的等式,按部就班,进行前向传播,逐一计算第 L 2 L_2 L2层的所有激活值,然后是第 L 3 L_3 L3层的激活值,以此类推,直到第 L n l L_{n_l} Lnl层。这是一个前馈神经网络的例子,因为这种联接图没有闭环或回路。

通过上面的过程可以看出,DNN的前向传播算法也就是利用我们的若干个权重系数矩阵W,偏倚向量b来和输入值向量x进行一系列线性运算和激活运算,从输入层开始,一层层的向后计算,一直到运算到输出层,得到输出结果为止。

四、DNN反向传播 BP算法

公式推导:https://www.cnblogs.com/pinard/p/6422831.html 公式部分看不太懂。
大白话讲解:https://blog.csdn.net/zhaomengszu/article/details/77834845

三、用神经网络做分类

之前做分类,我们用逻辑回归或者linear SVM(LR和Linear SVM的区别就是,LR找到这样一条直线将数据分成两部分即可,而Linear SVM则是试图找到一条最大间隔化的、具有鲁棒性的直线使其可分),都是解决的线性可分的数据,如果数据是非线性可分(找不到一条直线能够分开两类样本点)呢?

直线划分 + 逻辑操作 选定模块区域,然后多块区域之间能OR 组合

参考:
http://ufldl.stanford.edu/wiki/index.php/神经网络

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值