【高级学习算法】4.神经网络基础

发布时间 2023-10-07 18:41:26作者: asdio

神经网络概述

神经元模型

每个神经元可以被看作是一个处理单元/神经核,主要包括

  • 输入部分:多个输入/树突
  • 处理部分:神经核
  • 输出部分:单个输出/轴突

神经网络是大量神经元相互链接并通过电脉冲来交流的一个网络

神经网络

在线性回归中,我们通过将输入和输出之间的关系建模为线性函数来预测输出。这个线性函数就可以看作是一个神经元。

img

以需求预测为例,影响一个产品的需求的因素有很多,比如产品的价格、产品的原材料、产品的广告投入、产品的运费等等。

产品的价格、原材料可能会影响产品的质量;价格和运费可能影响定价....质量、定价、广告投入可能会影响产品的销量。

img

以此构建神经网络,每个神经元都可以看作是一个线性回归模型,每个神经元的输出都可以作为下一个神经元的输入。

神经网络层

神经网络层

神经网络的重要组成部分有:

  • 隐藏层:神经网络的基本构成单位是神经元层。隐藏层是输入层和输出层之间的神经元层,负责从输入特征中提取有用信息。

  • 激活函数:神经元使用激活函数来处理其输入。激活函数将原始输入转换为激活值,用于传递给下一层。

    • 激活函数的作用是引入非线性因素,使得神经网络可以解决非线性问题。如果没有激活函数,即使有再多的隐藏层,也只相当于一个隐藏层,因为多个线性层的叠加仍然是线性的。

    • 常用的激活函数有:Sigmoid、Tanh、ReLU、Leaky ReLU、Maxout、ELU、SELU、Swish等。

  • 计算:每个神经元接收输入值并计算其激活值。激活值是通过将权重(w)与输入值(x)进行点积运算、加上偏置值(b),并将结果传递给激活函数得到的。激活值随后作为下一层神经元的输入。

符号约定

使用上标方括号表示层,使用下标数字表示层中的神经元。

例如,\(a^{[2]}_1\) 表示第 2 层的第 1 个神经元。

多层神经网络

多层神经网络是指包含多个隐藏层的神经网络。将多个隐藏层堆叠在一起,就可以构建多层神经网络,每一层的输出都是下一层的输入。

img

公式表达为:

\[a^{[l]}_j = g(w^{[l]}_j a^{[l-1]} + b^{[l]}_j) \]

神经网络的前向传播

神经网络的前向传播是指从输入层到输出层的计算过程。

前向传播的计算过程

前向传播算法首先计算第 1 层的激活值,然后将激活值传递给第 2 层,以此类推,直到计算出输出层的激活值。

二元分类问题

将二元分类问题转换为神经网络的输出层只有一个神经元的二元分类问题。输出层的激活值 \(a^{[L]}\) 表示为:

\[a^{[L]} = \sigma(z^{[L]}) \]

其中,\(z^{[L]}\) 表示输出层的输入,\(\sigma\) 表示激活函数。

TensorFlow实现

TensorFlow是一个开源的机器学习框架,由Google开发,用于构建和训练神经网络。

TensorFlow中的数据

TensorFlow中的数据是以张量(Tensor)的形式表示的。

tf.Tensor是一个多维数组,可以将其看作是一个n维数组或列表。张量的阶表示张量的维数,张量的阶数也称为张量的秩。

Tensor和NumPy中的数组非常相似,Tensor可以使用.numpy()方法将其转换为NumPy数组。

构建神经网络

层的创建

TensorFlow中可以使用Dense层来创建神经网络的层。

# 创建一个Dense层
layer = tf.keras.layers.Dense(2, activation='linear')

在上面的代码中,2表示神经元的数量,activation表示激活函数。

顺序模型

TensorFlow中可以使用Sequential模型来构建神经网络顺序,使多个层按顺序堆叠在一起。

# 创建一个顺序模型
model = tf.keras.Sequential([
    tf.keras.layers.Dense(2, activation='relu'),
    tf.keras.layers.Dense(3, activation='relu'),
    tf.keras.layers.Dense(4)
])

编译模型

在训练模型之前,需要通过compile方法来配置模型的学习过程。

# 编译模型
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
              loss=tf.keras.losses.categorical_crossentropy,
              metrics=[tf.keras.metrics.categorical_accuracy])

在上面的代码中,optimizer表示优化器,loss表示损失函数,metrics表示评估指标。

训练模型

在训练模型时,可以使用fit方法来训练模型。

# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=32)

在上面的代码中,x_train表示训练集的输入,y_train表示训练集的输出,epochs表示训练的轮数,batch_size表示每次训练的样本数。

推理

在训练模型之后,可以使用predict方法来进行推理。

# 推理
model.predict(x_test)

Normalization:在训练模型之前,需要对数据进行归一化处理,可以使用tf.keras.layers.experimental.preprocessing.Normalization层来对数据进行归一化处理。
归一化的过程如下

 normalizer = tf.keras.layers.experimental.preprocessing.Normalization()
 normalizer.adapt(x_train)
 x_train_normalized = normalizer(x_train)
 x_test_normalized = normalizer(x_test)