机器学习个人笔记——(六)神经网络(1)从线性回归到神经网络简单直观分析

一、线性回归与神经网络

神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。

单层

单个输出

假设现需要预测房屋的出售价格,房屋通过以下特征,面积( x 1 x_{1} x1)空气指数( x 2 x_{2} x2),交通指数( x 3 x_{3} x3),最终输出价格( y y y

面积( x 1 x_{1} x1空气指数( x 2 x_{2} x2交通指数( x 3 x_{3} x3)价格( y y y
100254030
120354550

若上表为数据样本集,
使用线性回归去训练模型并预测,步骤如下:

  1. 设定线性方程为:
    y = w 1 x 1 + w 2 x 2 + w 3 x 3 + b y=w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}+b y=w1x1+w2x2+w3x3+b

  2. 通过数据集训练,求出最合适的参数

w 1 , w 2 , w 3 , b w_{1},w_{2},w_{3},b w1,w2,w3,b

  1. 从而得到得到一个完整的表达式:
    y = w 1 x 1 + w 2 x 2 + w 3 x 3 + b y=w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}+b y=w1x1+w2x2+w3x3+b

  2. 当输入一个新的数据(输入特征值 x 1 , x 2 , x 3 x_{1},x_{2},x_{3} x1,x2,x3),代入3中的方程,即可实现预测 y y y的效果。

向量化:

w 1 , w 2 , w 3 w_{1},w_{2},w_{3} w1,w2,w3看成一个列向量:
w = [ w 1 w 2 w 3 ] \mathbf{w}=\begin{bmatrix} w_{1}\\ w_{2}\\ w_{3} \end{bmatrix} w=w1w2w3
将输入特征也 x 1 , x 2 , x 3 x_{1},x_{2},x_{3} x1,x2,x3也看成一个列向量:
x = [ x 1 x 2 x 3 ] \mathbf{x}=\begin{bmatrix} x_{1}\\ x_{2}\\ x_{3} \end{bmatrix} x=x1x2x3

此时表达式 y = w 1 x 1 + w 2 x 2 + w 3 x 3 + b y=w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}+b y=w1x1+w2x2+w3x3+b
向量化即转换为:
y = w T x + b y=\mathbf{w^Tx}+b y=wTx+b

以上是线性回归实现预测房屋价格的例子

用图来表示即
在这里插入图片描述
在这个例子中,只有一个输出: y y y

多个输出

若,
将预测房屋价格问题进行修改,不光要预测价格,还要预测房屋内的房间数量
如此以来,训练样本集的特征以及 标签即如下表所示。

面积( x 1 x_{1} x1空气指数( x 2 x_{2} x2交通指数( x 3 x_{3} x3)价格( y 1 y_{1} y1房间数量 y 2 y_{2} y2
1002540305
1203545506

此时,若要实现该模型,则需要设2个方程
分别为
y 1 = w 1 T x + b 1 y_{1}=\mathbf{w_{1}^Tx}+b_{1} y1=w1Tx+b1
y 2 = w 2 T x + b 2 y_{2}=\mathbf{w_{2}^Tx}+b_{2} y2=w2Tx+b2
通过训练集分别求出
w 11 , w 12 , w 13 , b 1 ( 即 w 1 , b 1 w_{11},w_{12},w_{13},b_{1}(即\mathbf{w_{1}},b_{1} w11,w12,w13,b1w1b1
w 21 , w 22 , w 23 , b 22 ( 即 w 1 , b 2 w_{21},w_{22},w_{23},b_{22}(即\mathbf{w_{1}},b_{2} w21,w22,w23,b22w1b2
将新输入的特征分别代入两个方程中即可预测 y 1 , y 2 y_{1},y_{2} y1y2
示意图如下,此时有2个输出: y 1 , y 2 y_{1},y_{2} y1y2
在这里插入图片描述

多层

  1. 单层单个输出中,我们直接将 x 1 , x 2 , x 3 x_{1},x_{2},x_{3} x1,x2,x3代入方程中,得到输出的预测值 y y y
  2. 单层多个输出中,将 x 1 , x 2 , x 3 x_{1},x_{2},x_{3} x1,x2,x3,代入不同的方程,得到不同的输出预测值 y 1 , y 2 y_{1},y_{2} y1,y2

缺点:使用线性回归,最终都是通过一个直线,或者平面对数据进行拟合,但是,在实际问题中,许多问题并不都是线性的

现将问题再进行修改,我需要预测房屋中的家庭人口数量
训练样本集的特征以及标签即如下表所示。

面积( x 1 x_{1} x1空气指数( x 2 x_{2} x2交通指数( x 3 x_{3} x3)人口数量 y y y
10025404
12035455

此时依旧可以使用线性回归,使用如下方式进行线性拟合
在这里插入图片描述
但是,从特征和标签的相关性来看,家庭人口数面积( x 1 x_{1} x1),空气指数( x 2 x_{2} x2),交通指数( x 3 x_{3} x3) 似乎并没有直接的关联性,若只使用线性回归进行拟合可能会导致训练出来的效果非常差。

从另一方面来看,家庭人口数这个标签,和 房间数量 以及 房屋的价格(等价于经济水平),相关性比较大,因此使用房间数量房屋价格作为特征,所训练出来的效果可能会更好。

但是给出的特征里,并没有房间数量房屋价格这两个特征。

​这个时候就可以借助单层的问题思路,引出多层的概念
我们定义一个新的方程
y = l 1 y 1 + l 2 y 2 + c y=l_{1}y_{1}+l_{2}y_{2}+c y=l1y1+l2y2+c
y 1 y_{1} y1房间数量特征, y 2 y_{2} y2房屋价格特征

在之前的问题中,我们可以通过特征值 x 1 , x 2 , x 3 x_{1}, x_{2}, x_{3} x1,x2,x3分别代入以下两个方程中,得到 y 1 , y 2 y_{1},y_{2} y1,y2
y 1 = w 1 T x + b 1 y_{1}=\mathbf{w_{1}^Tx}+b_{1} y1=w1Tx+b1
y 2 = w 2 T x + b 2 y_{2}=\mathbf{w_{2}^Tx}+b_{2} y2=w2Tx+b2
此时,再将 y 1 , y 2 y_{1},y_{2} y1,y2作为已知的特征,代入最终的方程,进行训练得到合适的参数 l 1 , l 2 , l 3 , c l_{1},l_{2},l_{3},c l1,l2,l3,c
y = l 1 y 1 + l 2 y 2 + c y=l_{1}y_{1}+l_{2}y_{2}+c y=l1y1+l2y2+c
即可得到所需要的 y y y

为了区分,使用 l 1 , l 2 , c l_{1},l_{2},c l1,l2,c作为参数

向量化即为:
y = l T x + c y=\mathbf{l^Tx}+c y=lTx+c

用图进行表示即为
在这里插入图片描述

这个就有点类似于神经元,每个节点干不同的事情

在机器学习中的神经网络也是这样一个结构,但是相比机器学习的神经网络还少了一个部分,激活函数。

二、神经网络原理

在神经网络中, y 1 , y 2 y_{1},y_{2} y1,y2并没有明确的含义,在之前为了表达更直观,将 y 1 , y 2 y_{1},y_{2} y1,y2称作为房间数量房屋价格这两个特征,但是实际上,在一个完整的神经网络中,隐藏层的输出的不会给出明确含义

同样,一个多层的神经网络结构包含了输入层,隐藏层,输出层

而,在神经网络中,神经元节点会套一层激活函数
例如在上述的隐藏层和输出层表达式中,
y 1 = w 1 T x + b 1 y_{1}=\mathbf{w_{1}^Tx}+b_{1} y1=w1Tx+b1
y 2 = w 2 T x + b 2 y_{2}=\mathbf{w_{2}^Tx}+b_{2} y2=w2Tx+b2
y = l T y + c y=\mathbf{l^Ty}+c y=lTy+c
加入对应的激活函数=>
y 1 = f 1 ( w 1 T x + b 1 ) y_{1}=f_{1}(\mathbf{w_{1}^Tx}+b_{1}) y1=f1(w1Tx+b1)
y 2 = f 2 ( w 2 T x + b 2 ) y_{2}=f_{2}(\mathbf{w_{2}^Tx}+b_{2}) y2=f2(w2Tx+b2)
y = f 3 ( l T y + c ) y=f_{3}(\mathbf{l^Ty}+c) y=f3(lTy+c)
其中, f 1 ( x ) , f 2 ( x ) , f 3 ( x ) f_{1}(x),f_{2}(x),f_{3}(x) f1(x),f2(x),f3(x)为激活函数。

用图表示如下:
在这里插入图片描述

一般结构

神经网络中,如下图
输入层,m个特征,即m个输入,分别为 x 1 x_{1} x1~ x m x_{m} xm
隐藏层,有k层,每一层的节点个数分别为 n 1 , n 2 , . . . , n k n_{1},n_{2},...,n_{k} n1,n2,...,nk,即第i层有 n i n_{i} ni个输出

第1层隐藏层的第1个节点,其表达式为:
y 1 [ 1 ] = f ( w 11 [ 1 ] x 1 + w 12 [ 1 ] x 2 + . . . + w 1 m [ 1 ] x m + b 1 [ 1 ] ) y^{[1]}_{1}=f(w^{[1]}_{11}x_{1}+w^{[1]}_{12}x_{2}+...+w^{[1]}_{1m}x_{m}+b^{[1]}_{1}) y1[1]=f(w11[1]x1+w12[1]x2+...+w1m[1]xm+b1[1])
m为上一层的输入,向量形式
y 1 [ 1 ] = f ( w 1 [ 1 ] x + b 1 [ 1 ] ) y^{[1]}_{1}=f(\mathbf{w^{[1]}_{1}x}+b^{[1]}_{1}) y1[1]=f(w1[1]x+b1[1])
-----------------------------------------------------------------------------------
第1层隐藏层的第2个节点,其表达式为:
y 2 [ 1 ] = f ( w 21 [ 1 ] x 1 + w 22 [ 1 ] x 2 + . . . + w 2 m [ 1 ] x m + b 2 [ 1 ] ) y^{[1]}_{2}=f(w^{[1]}_{21}x_{1}+w^{[1]}_{22}x_{2}+...+w^{[1]}_{2m}x_{m}+b^{[1]}_{2}) y2[1]=f(w21[1]x1+w22[1]x2+...+w2m[1]xm+b2[1])
m为上一层的输入,向量形式
y 2 [ 1 ] = f ( w 2 [ 1 ] x + b 2 [ 1 ] ) y^{[1]}_{2}=f(\mathbf{w^{[1]}_{2}x}+b^{[1]}_{2}) y2[1]=f(w2[1]x+b2[1])
-----------------------------------------------------------------------------------
第1层隐藏层的第j个节点 j ∈ [ 1 , 2 , 3... , n 1 ] j \in [1,2,3...,n_{1}] j[1,2,3...,n1],
其表达式为:
y j [ 1 ] = f ( w j 1 [ 1 ] x 1 + w j 2 [ 1 ] x 2 + . . . + w j m [ 1 ] x m + b j [ 1 ] ) y^{[1]}_{j}=f(w^{[1]}_{j1}x_{1}+w^{[1]}_{j2}x_{2}+...+w^{[1]}_{jm}x_{m}+b^{[1]}_{j}) yj[1]=f(wj1[1]x1+wj2[1]x2+...+wjm[1]xm+bj[1])
m为上一层的输入,向量形式
y 2 [ 1 ] = f ( w j [ 1 ] x + b j [ 1 ] ) y^{[1]}_{2}=f(\mathbf{w^{[1]}_{j}x}+b^{[1]}_{j}) y2[1]=f(wj[1]x+bj[1])

第i层隐藏层的第j个节点 i ∈ [ 1 , 2 , 3... , k ] i \in [1,2,3...,k] i[1,2,3...,k], j ∈ [ 1 , 2 , 3... , n j ] j \in [1,2,3...,n_{j}] j[1,2,3...,nj]
且设第i层隐藏层的输入为 x 1 [ i ] , x 2 [ i ] , . . . , x n i − 1 [ i ] x^{[i]}_{1},x^{[i]}_{2},...,x^{[i]}_{n_{i-1}} x1[i],x2[i],...,xni1[i](向量形式: x [ i ] \mathbf{x^{[i]}} x[i])
(输入的个数为上一层的输出个数)
表达式为:
y i [ i ] = f ( w i 1 [ i ] x 1 [ i ] + w i 2 [ i ] x 2 [ i ] + . . . + w i n i − 1 [ i ] x n i − 1 [ i ] + b i [ i ] ) y^{[i]}_{i}=f(w^{[i]}_{i1}x^{[i]}_{1}+w^{[i]}_{i2}x^{[i]}_{2}+...+w^{[i]}_{in_{i-1}}x^{[i]}_{n_{i-1}}+b^{[i]}_{i}) yi[i]=f(wi1[i]x1[i]+wi2[i]x2[i]+...+wini1[i]xni1[i]+bi[i])
向量形式
y i [ i ] = f ( w j [ i ] x [ i ] + b i [ 1 ] ) y^{[i]}_{i}=f(\mathbf{w^{[i]}_{j}x^{[i]}}+b^{[1]}_{i}) yi[i]=f(wj[i]x[i]+bi[1])

在这里插入图片描述
输出层

输出层的n个输出, y 1 y_{1} y1~ y n y_{n} yn表达式为:
y 1 = f ( w 1 k + 1 x ) y_{1}=f(\mathbf{w^{k+1}_{1}x}) y1=f(w1k+1x) (k+1表示隐藏层的后一个)
y 2 = f ( w 2 k + 1 x ) y_{2}=f(\mathbf{w^{k+1}_{2}x}) y2=f(w2k+1x)

y n = f ( w n k + 1 x ) y_{n}=f(\mathbf{w^{k+1}_{n}x}) yn=f(wnk+1x)

神经网络传播过程

在这里插入图片描述
以该结构为例,
输出 y y y
y = f 3 ( l 1 y 1 + l 2 y 2 + c ) = f 3 ( l T x + c ) y=f_{3}(l_{1}y_{1}+l_{2}y_{2}+c)=f_{3}(\mathbf{l^Tx}+c) y=f3(l1y1+l2y2+c)=f3(lTx+c)

y 1 = f 1 ( w 11 x 1 + w 12 x 2 + w 13 x 3 + b 1 ) = f 1 ( w 1 T x + b 1 ) y_{1}=f_{1}(w_{11}x_{1}+w_{12}x_{2}+w_{13}x_{3}+b_{1})=f_{1}(\mathbf{w_{1}^Tx}+b_{1}) y1=f1(w11x1+w12x2+w13x3+b1)=f1(w1Tx+b1)
y 2 = f 2 ( w 21 x 1 + w 22 x 2 + w 23 x 3 + b 2 ) = f 2 ( w 2 T x + b 2 ) y_{2}=f_{2}(w_{21}x_{1}+w_{22}x_{2}+w_{23}x_{3}+b_{2})=f_{2}(\mathbf{w_{2}^Tx}+b_{2}) y2=f2(w21x1+w22x2+w23x3+b2)=f2(w2Tx+b2)

联立以上3个方程,可得
y = f 3 ( l 1 f 1 ( w 11 x 1 + w 12 x 2 + w 13 x 3 + b 1 ) + l 2 f 2 ( w 21 x 1 + w 22 x 2 + w 23 x 3 + b 2 ) + c ) y=f_{3}(l_{1}f_{1}(w_{11}x_{1}+w_{12}x_{2}+w_{13}x_{3}+b_{1})+l_{2}f_{2}(w_{21}x_{1}+w_{22}x_{2}+w_{23}x_{3}+b_{2})+c) y=f3(l1f1(w11x1+w12x2+w13x3+b1)+l2f2(w21x1+w22x2+w23x3+b2)+c)

=>
y = f 3 ( l 1 f 1 ( w 1 T x + b 1 ) + l 2 f 2 ( w 2 T x + b 2 ) + c ) y=f_{3}(l_{1}f_{1}(\mathbf{w_{1}^Tx}+b_{1})+l_{2}f_{2}(\mathbf{w_{2}^Tx}+b_{2})+c) y=f3(l1f1(w1Tx+b1)+l2f2(w2Tx+b2)+c)

若所有的激活函数为线性函数,
f ( x ) = x f(x)=x f(x)=x,则输出 y y y的表达式如下

y = l 1 ( w 1 T x + b 1 ) + l 2 ( w 2 T x + b 2 ) + c y=l_{1}(\mathbf{w_{1}^Tx}+b_{1})+l_{2}(\mathbf{w_{2}^Tx}+b_{2})+c y=l1(w1Tx+b1)+l2(w2Tx+b2)+c

三、激活函数

为什么要使用非线性激活函数

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
即此时相当于线性激活函数 f ( x ) = x f(x)=x f(x)=x

可以通过数学证明,若在所有的隐藏层和输出层中,使用线性激活函数,那么无论隐藏层有多少层,最后所训练出来的模型的效果,和直接单层输出的效果是一样的

如果使用非线性激活函数,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

常用的激活函数

(1) sigmoid函数

f ( x ) = 1 1 + e − z = s i g m o i d ( x ) f(x)=\frac{1}{1+e^{-z}} =sigmoid(x) f(x)=1+ez1=sigmoid(x)

曲线:
在这里插入图片描述
用于隐层神经元输出,取值范围为(0,1)
它可以将一个实数映射到(0,1)的区间,可以用来做二分类。
在特征相差比较复杂或是相差不是特别大时效果比较好。

(2) Tanh函数

f ( x ) = e x − e − x e x + e − x = t a n h ( x ) f(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} =tanh(x) f(x)=ex+exexex=tanh(x)
在这里插入图片描述

取值范围为[-1,1]tanh在特征相差明显时的效果会很好

与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好,经过测试,tanh 也确实是比 sigmoid更好

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值