机器学习与深度学习3、神经网络原理

发布于:2025-03-28 ⋅ 阅读:(28) ⋅ 点赞:(0)

一、线性变换

1.1 单个(层)神经元:

        如上图所示,单个参数经过单个神经元变化后得到输出y为wx+b,其中w为权重,b为偏置,这个过程就叫做线性变换,也就是x和y呈线性相关

1.2 多个神经元输出 

注意神经元的输入大小必须跟x的大小相同。例如:x包含5个数,那么输入层神经元就有5个

1.2.1 输出神经元个数相同

        多个神经元与单个神经元相似,x变为向量[x_1, x_2, x_3,···,x_n],输出y也为向量,输出的向量为[y_1, y_2, y_3,···,y_n],每个y对应一个x的权重和偏置计算。每个x的权重和偏置都是不相同的

1.2.2 不同输出

        当出现输出结果不同时,例如一个网络为4个输入层,2个输出层。那么该网络的输入层需要处理4个输入数据得到2个输出数据,也就对应了4输入神经元,2个输出层神经元,这时神经网络需要如何计算呢?

        此时就需要引入矩阵运算,w权重变为权重矩阵如下所示:

\begin{bmatrix} x_1 & x_2 & x_3 & x_4 \end{bmatrix}\cdot \begin{bmatrix} w_{11} & w_{12} \\ w_{21} & w_{22} \\ w_{31} & w_{32} \\ w_{41} & w_{42} \end{bmatrix}+\begin{bmatrix} b_1 & b_2 \end{bmatrix}=\begin{bmatrix} y_1 & y_2 \end{bmatrix} 

二、非线性变换

2.1 非线性变换意义

        如上图所示, 若引入多层神经元,计算方式仍为y = wx + b时,输出仍为线性变换,仍相当于单层神经元的作用。x和y仍为线性关系。因此我们要引入非线性变换来解决此问题。

        把神经网络训练看为分类过程,那么只有线性变化就相当于在任意二维平面上只能划分出线在任意三维体中只能划分出面,因此无法用于复杂的分类问题。那么就要引入非线性函数。

        我们可以将非线性激活函数理解为将分类线进行扭曲变换,因此可以进行更复杂的分类问题。    

图2.1引入非线性函数f的神经元:

2.2 激活函数

        上述的非线性函数就是激活函数,常见的激活函数有tanh,sigmoid,ReLu等。

2.2.1 ReLu函数

        如下图是ReLu函数的图像和它的一个改进Leaky ReLu,融入Relu函数后,变为如下计算公式

y = wx + b   →   y = ReLu(wx + b)  →  y = Max(wx + b, 0)

例如

我们需要训练一个网络如下,输入x输出y满足:y = x^3 +x^2 -x -1

设计一个神经网络拟合x和y:输入层1,隐藏层6,输出层1

2.2.2 无激活函数 

        假如训练出来中间层的w和b为:[5,7.7],[1.2,1.3],[-1.2,-1],[1.2,-0.2],[2,-1.1],[5,-5]若没有激活函数,那么计算出来的6个线性表达式相加仍为一个线性表达式y = 13.2x+1.7,为一条直线,无法拟合函数图像。

2.2.3 使用ReLu激活

        通过ReLu的图像可知,使用ReLu激活函数时,函数只会输出正数或0,无法输出负数,这是不符合预期的,因此我们还需要加上符号矩阵,使用ReLu激活后表达式变为:

y = \begin{bmatrix} -1 &-1 &-1 &1 &1 &1 \end{bmatrix}\cdot \begin{bmatrix} \max(-5x - 7.7, 0) \\ \max(-1.2x - 1.3, 0) \\ \max(1.2x + 1, 0) \\ \max(1.2x - 0.2, 0) \\ \max(2x - 1.1, 0) \\\max(5x - 5, 0) \end{bmatrix}

 神经网络的拟合图像变为如下,红色为训练出的网络拟合函数,蓝色为目标函数:

        如上图可看出通过ReLu激活后,神经网络可以拟合复杂函数。类似的激活函数还有sigmoid函数,tanh函数等一些其他函数的变体。