深度学习(一):神经元模型、感知机与BP算法

下面内容主要来自西瓜书的第五章《神经网络》5.1~5.3节。

1、神经元模型

  这一节简单,讲了两个概念,神经元模型以及激活函数。先来看神经元模型吧。
在这里插入图片描述
因此,第 j j j个神经元的输出为
y j = f ( Σ i = 1 n w i j x i − θ ) = f ( Σ i = 0 n w i j x i ) y_j=f(\Sigma_{i=1}^n w_{ij}x_i-\theta)=f(\Sigma_{i=0}^n w_{ij}x_i) yj=f(Σi=1nwijxiθ)=f(Σi=0nwijxi)其中 x i x_i xi为第 i i i个输入, w i , j w_{i,j} wi,j为第 j j j个神经元第 i i i个输入的权重, θ \theta θ为门限,且 x 0 = − 1 , w 0 j = θ x_0=-1,w_{0j}=\theta x0=1,w0j=θ
上面图和式子里面的 f ( ⋅ ) f(\cdot) f()为激活函数。引用网上博客说明为何要采用激活函数:

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。


作者:StevenSun2014
来源:CSDN
原文:https://blog.csdn.net/tyhj_sf/article/details/79932893
版权声明:本文为博主原创文章,转载请附上博文链接!

同一篇博客里面指出,早期研究神经网络主要采用sigmoid函数或者tanh函数,输出有界,很容易充当下一层的输入。
近些年Relu函数及其改进型(如Leaky-ReLU、P-ReLU、R-ReLU等)在多层神经网络中应用比较多。这里先只看sigmoid函数吧。
在这里插入图片描述
上面是函数图形,其表达式为
s i g m o i d ( x ) = 1 1 + e x . {\rm sigmoid}(x)=\frac{1}{1+e^x}. sigmoid(x)=1+ex1.

2、感知机与多层网络

  这个部分,我觉得可以跟花书上面6.1《实例:学习XOR》结合起来理解。先按照西瓜书上的表达,我们看如何用包含两层神经元的感知机来完成两个输入的逻辑运算。两层神经元感知机的结构示意图如下:
在这里插入图片描述
这里我们假定激活函数为符号函数,即 y = s g n ( x T w ) y={\rm sgn}({\bf x}^{\rm T}{\bf w} ) y=sgn(xTw)。下面我们两个输入神经元分别为 x 1 , x 2 x_1,x_2 x1,x2,而 x 0 = − 1 x_0=-1 x0=1 w 0 w_0 w0为门限,即 x = [ − 1   x 1   x 2 ] T {\bf x}=[-1 \ x_1\ x_2]^{\rm T} x=[1 x1 x2]T以及 w = [ θ   w 1   w 2 ] T {\bf w}=[\theta \ w_1\ w_2]^{\rm T} w=[θ w1 w2]T
下面我们来实现逻辑运算:

  • “and”: w = [ 2 , 1 , 1 ] T {\bf w}=[2,1,1]^{\rm T} w=[2,1,1]T
  • “or” : w = [ 0.5 , 1 , 1 ] T {\bf w}=[0.5,1,1]^{\rm T} w=[0.5,1,1]T
  • “not” : w = [ 0.5 , − 1.2 , 0 ] T {\bf w}=[0.5, -1.2, 0]^{\rm T} w=[0.5,1.2,0]T

到目前为止,都很顺利。事实上,学习的过程就是逐步调整权重系数向量 w \bf w w的过程。对于训练样例 ( x , y ) ({\bf x},y) (x,y),若当前感知机的输出为 y ^ \hat y y^,则如下来调整感知机权重:
w i ← w i + Δ w i w_i\leftarrow w_i+\Delta w_i wiwi+Δwi Δ w i = η ( y − y ^ ) x i . \Delta w_i=\eta(y-\hat y)x_i. Δwi=η(yy^)xi.
西瓜书上谈到,这种只拥有一层功能神经元(即只有输出层神经元进行激活函数处理)的感知机,学习能力非常有限。对于异或运算这类简单的“非线性可分问题”,这样的感知机也没法解决。下面我们切换到花书上,看看《6.1 实例:学习XOR》。

XOR函数提供了我们想要学习的目标函数 y = f ∗ ( x ) y=f^*(x) y=f(x)。我们的模型给出了一个函数 y = f ( x ; θ ) y=f(\bf x;\bm \theta) y=f(x;θ),并且我们的学习算法会不断调整参数 θ \bm \theta θ来使得 f f f尽可能接近 f ∗ f^* f。尽管对于二进制而言,MSE并不是一个合适的代价函数,我们还是先从MSE开始(anyway, we need to start):
J ( w ) = 1 4 Σ x ∈ X [ f ∗ ( x ) − f ( x ; θ ) ] 2 J({\bf w})=\frac{1}{4}\Sigma_{x\in \mathbb X}[f^*({\bf x})-f({\bf x; \bm \theta})]^2 J(w)=41ΣxX[f(x)f(x;θ)]2下面我们来确定 f ( x ; θ ) f(\bf x;\bm \theta) f(x;θ)的形式。我们选用线性模型,即
f ( x ; w , b ) = x T w + b . f({\bf x;w},b)={\bf x}^{\rm T}{\bf w}+b. f(x;w,b)=xTw+b.跟上面一样,这个模型没法学习XOR,不过用的方法不一样。西瓜书里面画了超平面,花书里面是这样说明的:如果 x 1 = 0 x_1=0 x1=0,那么输出是随着 x 2 x_2 x2的增大而增大;但如果 x 1 = 1 x_1=1 x1=1,那么输出是随着 x 2 x_2 x2的增大而减小。可是 x 2 x_2 x2的系数是固定的,线性模型不能随着 x 1 x_1 x1的改变来改变 x 2 x_2 x2的系数,所以这个问题

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值