2022年期末总结

科学计算与数学建模期末总结

目录:

1
2
3
4
5
判断 1分*10个
单选 2分*5个
多选 3分*10个
简答 10分*3个
综合简答 1个*20分

[TOC]

必考

考.CNN.通道数与filter个数相等

image-20221007084324665

新的图片的通道数 与 卷积过程中的filter个数的关系 相等

考.隐空间和特征空间的关系

在深度学习中,隐空间和特征空间是两个重要的概念,它们之间有一定的关系。

特征空间是指输入数据经过特征提取之后所构成的空间。在深度学习中,我们通常会将输入数据通过多层神经网络进行变换和抽象,最终得到一个更加抽象、更有意义的特征表示。这个特征表示的空间就是特征空间。在特征空间中,每个数据样本都被表示为一个向量,这个向量的每个维度代表了某个特征的值,因此特征空间中的每个维度都对应着某种意义,如像素值、颜色等。

隐空间是指神经网络中的隐藏层输出所构成的空间。隐藏层是神经网络中的一层,其输出是由输入数据经过一系列非线性变换和激活函数处理得到的。隐空间中的每个维度都代表了神经元的输出值,这些神经元可以认为是在对输入数据进行某种高级抽象和表示。因此,隐空间的维度往往比特征空间的维度更高,同时隐空间中的每个维度往往难以解释。

隐空间和特征空间之间的关系通常体现在神经网络的训练过程中。在训练过程中,神经网络通过不断地调整参数,使得隐空间中的表示可以更好地捕捉数据的特征,并能够将不同类别的数据样本分开。同时,隐空间的输出也可以被进一步处理和解释,得到更加有意义的特征表示,从而提高神经网络在各种任务中的表现。因此,隐空间和特征空间是深度学习中两个非常重要的概念,它们之间的关系对于深度学习算法的理解和优化都有着重要的意义。

考.神经网络为什么Deep不Fat

可以使用更少的数据产生同样的效果

神经网络通常会随着深度的增加而变得更加复杂和强大,而随着网络的宽度增加而变得更加庞大和容易过拟合。这就是为什么神经网络通常被描述为“deep而不fat”,即增加深度而不是增加宽度可以更好地提高网络性能的原因。

一方面,增加网络的深度可以使得网络能够学习到更加抽象和高层次的特征表示,从而提高网络的表现能力。这是因为深度网络可以通过层与层之间的非线性变换来逐渐组合和学习输入数据的不同抽象特征。随着网络的深度增加,网络能够更好地理解和表示数据之间的关系,并且可以通过逐层的学习来提高整个网络的表示能力。

另一方面,增加网络的宽度会使得网络的参数数量增加,从而容易导致过拟合。在过拟合的情况下,神经网络在训练数据上的表现很好,但在测试数据上表现较差。这是因为过拟合的网络过于适应了训练数据的噪声和特异性,而无法泛化到新的数据上。因此,在设计神经网络时,需要权衡网络的深度和宽度,以便在提高性能的同时避免过拟合。

总之,增加网络的深度可以提高网络的表现能力,而增加网络的宽度则容易导致过拟合。在神经网络的设计和优化中,我们需要综合考虑这两个因素,以便得到更加高效和准确的网络结构。

考.对比常见模型的建模三部曲

image-20230218015553982

image-20230218015630174

image-20230218015655491

image-20230218015711073

image-20230218015719284

17级(换老师,参考价值低)

选择题

梯度下降

神经网络中的梯度下降方法:

  1. A.梯度下降方法是利用数值优化中对待优化函数求导能够获敢函数变化最快方向的信息从而逐步更新函数参数的方法

  2. B.在神经网络中,参数是待定的,要找到最恰当拟合输入输出数据的函数,就需要构建损失函数

  3. D.相比于对神经网络中每个参数直接求梯度,采用反向传播算法的效率更高

sigmoid激活函数

A.采用sigmoid激活函数的单个神经元本质上起到了二分类的作用——❌

  • sigmoid激活函数也称S型生长曲线

Sigmoid函数的特性与优缺点:

  • Sigmoid函数的输出范围是0到1。由于输出值限定在0到1,因此它对每个神经元的输出进行了归一化。

  • 用于将预测概率作为输出的模型。由于概率的取值范围是0到1,因此Sigmoid函数非常合适

  • 梯度平滑,避免跳跃的输出值

  • 函数是可微的。这意味着可以找到任意两个点的Sigmoid曲线的斜率

  • 明确的预测,即非常接近1或0。

  • 函数输出不是以0为中心的,这会降低权重更新的效率

  • Sigmoid函数执行指数运算,计算机运行得较慢。

关于sigmoid激活函数的相关描述:

B.采用sigmoid激活函数的神经网络可以看成由多个逻辑回归模型叠加而成
C.神经网络的参数由所有神经元连接的权重和偏差组成
D.一个结构确定的神经网络对应一组函数集合,而该神经网络的参数确定后就只对应一个函数。

全连接前馈神经网络

  1. 一般由多层神经元连接而成

  2. 每层有多个神经元

  3. 从输入到输出各层之间的神经元连接都是沿着从输入层到输出层的方向

  4. 两相邻层的神经元之间两两互相有连接

关于梯度下降和反向传播算法的正确说法

  1. 反向传播算法相比于直接对每个参数求梯度,计算效率更高

  2. 随机梯度下降运行速度要比梯度下降快

  3. 在反向传播算法中,反向传递过程可以看成一个没有激活函数的反向的神经网络

  4. 随机梯度下降相对于梯度下降,损失函数会呈现较强的抖动

Keras

  1. Keras实现神经网络需要首先创建模型对象

  2. 在Keras中通过模型对象添加一个网络层的方法是add方法

  3. 在Keras中要进行模型训练,需要调用模型的fit方法

  4. 在Keras中添加一个网络层可以不需要设置输入维度和输出维度

卷积神经网络CNN

一种特殊的深层前馈网络

  1. convolution layer(卷积)

    • filter:过滤器,相当于神经元,每一个filter关注的范围不同,也叫卷积核
    • (其中每一个filter其实就等同于是fully connect layer里面的一个neuron)
    • 一个filter就代表了一个channel
  2. max pooling layer(池化)

    • 将经过卷积得到的maxtrix划分成新maxtrix并取每个划分区域的最大值
  3. flatten layer()

    • feature map拉直,拉直之后就可以丢到fully connected feedforward netwwork

假设第一层filter有2个,第二层的filter在考虑这个imput时是会考虑深度的,并不是每个channel分开考虑,而是一次考虑所有的channel。所以convolution有多少个filter,output就有多少个filter(convolution有25个filter,output就有25个filter。只不过,这25个filter都是一个立方体)

卷积 in Keras

model.add(Convolution2D( 25, 3, 3)

25代表有25个filter,3 *3代表filter是一个3 *3的matrix

Input_shape=(28,28,1)

假设我要做手写数字辨识,input是28 *28的image,每个pixel都是单一颜色。所以input_shape是(1,28,28)。如果是黑白图为1(blacj/white),如果是彩色的图时为3(每个pixel用三个值来表述)。

MaxPooling2D(( 2, 2 ))

2,2表示把2*2的feature map里面的pixel拿出来,选择max value

第二次的Convolution中的filter的大小是3*3但是每个filter的深度是上一次Convolution的filter数25,因此每个filter的参数个数为25 * 3 * 3 = 225

实例习题

image-20230212115701358

image-20230212123449580

应用

  1. 围棋AlphaGo

  2. 语音

  3. 文本

  4. 虽然文本和语音是一维的时序数据,但是可以用卷积神经网络

  5. 类激活图(class activation map)可视化方法是指对输入图像生成类激活的热力图

  6. 卷积神经网络一定会用到池化层

  7. 从空白输入图像开始,将梯度上升应用于已训练好的卷积神经网络输入图像的值,从而让某个过滤器的响应最大化,这样可以通过可视化的形式观察卷积神经网络学到的过滤器

CNN与GCN

比较卷积神经网络CNN和图卷积神经网络GCN的异同
  1. CNN 和GCN 都是通过对空间的卷积操作提取数据的空间相关性,但CNN只能适用于规整的网格型数据,而GCN能够适用于更具一般性的图结构数据。

  2. CNN 的卷积操作本质上是将矩阵转化为向量后的向量内积,而GCN 的卷积本质上是傅里叶/小波变换在图结构数据上的拓展。

  3. GCN 的卷积操作由邻居节点消息发送、节点的消息接收、节点信息融合,以及节点信息更新组成,而CNN可以看成GCN 卷积操作在网格型图上的一种特例

  4. CNN 的池化操作一般是平均池化或最大池化,GCN 的池化比较复杂,涉及到图结构数据中节点到聚类中心的分配。

图神经网络GCN

GCN的卷积运算包含以下步骤:

  1. 节点消息传播

  2. 节点消息接收

  3. 节点信息融合

词嵌入模型

关于词嵌入模型的正确说法:

  1. 在多语言嵌入模型中,来自不同语言的具有相似语义信息的词汇可以得到类似的嵌入表达

  2. 在多领域嵌入模型中,来自不同领域(文本、图像、语音等)的具有相似语义信息的实体可以得到类似的嵌入表达

  3. 词嵌入模型没有考虑词汇在句子中的先后关系

  4. 英语词汇的时态关系在词嵌入模型中可以保留

判断题

1.反向传播算法由前向和向传递两个阶段构成✔️
2.mini-batch相比于随机梯度下降(SGG)优势在于可以通过GPU进行并行处理✔️

  • 是的,mini-batch相比于随机梯度下降(SGD)的一个优势是可以通过GPU进行并行处理。

    在SGD中,每个样本都被用于更新模型参数,因此每个样本都需要进行一次前向传递和一次反向传递。这种逐个样本处理的方式不利于GPU并行计算,因为GPU在进行计算时需要同时处理多个数据。因此,SGD难以充分利用GPU的并行计算能力,导致训练速度较慢。

    相比之下,mini-batch将一部分数据样本组成一个batch,然后用这个batch进行一次前向传递和一次反向传递,从而更新模型参数。这样做的好处是,GPU可以同时处理batch中的多个数据,从而充分利用GPU的并行计算能力,加速模型训练。

    因此,使用mini-batch进行模型训练可以在一定程度上提高训练速度,并且更适合使用GPU进行并行计算。

3.由CNN构成的分类模型一般不包含全连接层❌
4.相比于浅层神经网络,深层神经网络实际上利用了模块化的思想✔️
5.在图像识别和语音识别中,深层神经网络模型训练后都发现越是靠近输入层的神经元学出的特征越是抽象❌
6.词嵌入是一种无需损失函数(?)无监督学习模型

  • Word2Vec模型是一种无需损失函数的无监督学习模型

  • 词嵌入是一种用于将单词转换为低维向量表示的技术。通常情况下,词嵌入是通过训练一个神经网络模型来学习单词向量的。因此,词嵌入模型可以是有监督学习模型也可以是无监督学习模型,具体取决于模型的训练方式。

    其中一种广泛使用的无监督学习模型是Word2Vec,该模型使用了跳字模型(Skip-gram)和连续词袋模型(CBOW)来学习单词向量。这些模型的训练过程是无监督的,因为它们不需要标注的标签或者目标,只需要使用输入的文本数据就可以完成模型训练。因此,Word2Vec模型是一种无需损失函数的无监督学习模型,它通过最大化一个特定的目标函数来学习单词向量,通常是最大化文本数据中单词序列的联合概率分布。

    然而,还有其他一些词嵌入模型,如GloVe和FastText,它们可能采用不同的训练方法或目标函数,有些可能是有监督学习模型或半监督学习模型。因此,是否需要损失函数和监督信号,以及模型是否为无监督学习模型,取决于具体的词嵌入模型。

7,全连接前馈神经网络DN从数据相关性角度来看,实际上是检测数据在一维空间上的全局相关性或全局模式✔️
8.从数据相关性角度来看,GCN检测的是数据在离散的非欧高维空间上节点与其邻居节点空间邻域结构上的相关性✔️
9.从数据相关性角度来看,RNN检测的是数据在一维时序数据上的空间相关性✔️
10.从各隐藏层神经元的视野域等角度来看,CNN隐藏层每个神经元的视野域是其每个输入神经元视野域的并集✔️
11.神经网络从计算上可以看成矩阵运算和非线性运算的多次叠加而组成的复合函数,且网络叠加的层次可看成复合函数的嵌套深度了✔️
12.随机梯度下降运行速度要比梯度下降慢❌
13.深层神经网络和浅层神经网络从对函数的表示能力角度来看是差不多的,但对于同样的机器学习任务,深层神经网络相对于浅层神经网络效率上更高✔️
14,词嵌入模型中输出的即为词汇的嵌入表示✔️

  • 词嵌入模型中输出的即为词汇的嵌入表示吗?是的,词嵌入模型的输出就是每个词汇的嵌入表示。词嵌入模型是一种将词汇映射到低维空间中的向量表示的技术,它将词汇表示为连续的低维向量,也称为嵌入向量或词嵌入(Word Embedding)。

    在词嵌入模型中,通常使用神经网络或矩阵分解等方法来训练模型。训练过程中,模型会学习到每个词汇的嵌入向量,这些嵌入向量可以用于表示词汇的语义信息、上下文信息等,有利于词汇的文本处理和语言模型的建立等任务。

    在自然语言处理(NLP)中,词嵌入模型已经成为了一种基本的技术,被广泛应用于各种任务中,如情感分析、机器翻译、文本分类、问答系统等。

15.深度自编码器的解码器和编码器必须是对称的❌
16.在基于卷积的自编码器中卷积运算和反卷积运算实际上是同一种运算✔️

  • 在基于卷积的自编码器(Convolutional Autoencoder)中,卷积运算和反卷积运算是不同的运算,它们在实现上有所不同,但是它们的目的都是提取和还原图像的特征。

    卷积运算和反卷积运算的区别主要体现在其运算过程中卷积核的使用方式上。卷积运算通过将一个卷积核在输入图像上滑动并进行点积计算,从而提取出输入图像的特征。反卷积运算则是将卷积核在输出特征图上滑动,并通过填充(padding)和步长(stride)的设置,将输出特征图的大小还原为输入图像的大小。

    因此,卷积运算和反卷积运算虽然实现上不同,但它们都是一种类似的局部连接和参数共享的操作。在基于卷积的自编码器中,卷积运算用于提取图像特征,反卷积运算用于通过特征图还原原始图像。为了提高自编码器的性能,通常还需要加入池化层、上采样层等其他操作,以实现更高效和更精确的特征提取和还原。

简答题

深度学习的本质是什么?

深度学习是一种人工智能领域中的机器学习方法,其本质是通过构建深度神经网络来学习数据中的复杂模式和规律。与传统机器学习方法不同,深度学习算法不需要手动提取特征,而是通过多层神经元对数据进行逐层抽象和表示学习,从而自动发现和提取有用的特征。

在深度学习中,神经网络通常包括多个隐藏层,每个隐藏层都由多个神经元组成,每个神经元将上一层的输出作为输入,并根据一定的权重和偏置进行计算,最终输出到下一层。通过不断地调整网络的权重和偏置,使得网络输出的结果与真实值之间的误差最小化,从而实现模型的优化和训练。

深度学习的本质是利用大量的数据和计算能力,自动发现并利用数据中的模式和规律,从而实现对复杂问题的准确建模和预测。通过不断增加神经网络的深度和复杂度,深度学习已经在多个领域取得了突破性的进展,例如图像识别、语音识别、自然语言处理等。

深度学习训练阶段的三个基本步骤?

深度学习的训练通常可以分为以下三个基本步骤:

  1. 正向传播(Forward Propagation):通过将输入数据喂给神经网络,让其从第一层开始逐层向前计算,直到计算出网络的输出值,这个过程就称为正向传播。在正向传播过程中,每个神经元会根据其输入和权重计算输出,并将输出传递到下一层,最终得到神经网络的输出。
  2. 反向传播(Backward Propagation):反向传播是深度学习中最关键的一个步骤。在反向传播中,先计算出神经网络输出的误差,然后从输出层开始逐层向后传递,通过链式法则计算每个神经元的误差贡献,并根据误差梯度调整每个神经元的权重和偏置。
  3. 权重更新:在反向传播过程中,计算出了每个神经元的误差贡献,但并没有立即更新权重和偏置。为了避免过拟合,通常使用随机梯度下降(Stochastic Gradient Descent, SGD)等优化算法来更新权重和偏置,使得神经网络的误差逐渐减小,最终收敛到最优解。

这三个步骤通常是交替进行的,即先进行一次正向传播和反向传播来计算误差梯度,然后再根据梯度更新权重和偏置。这个过程会不断迭代,直到神经网络的误差收敛到一个满意的水平或者达到预定的迭代次数。

为什么第一个步骤(正向传播)是必要的?

在深度学习中,正向传播是必要的步骤之一,因为它是神经网络中的信息传递和计算过程,是得到神经网络输出的第一步。

正向传播的过程可以理解为神经网络的前向运算,将输入数据从第一层输入到神经网络中,通过一系列非线性变换,逐层提取数据中的特征,最终得到神经网络的输出。在这个过程中,每个神经元都会根据其输入和权重计算输出,同时将输出传递到下一层,最终得到输出层的输出。正向传播的结果即为神经网络的预测值。

正向传播的结果将会被用于计算预测值与真实值之间的误差,并进一步用于反向传播更新神经网络的权重和偏置。因此,正向传播不仅是得到神经网络输出的第一步,还是训练神经网络所必须的步骤之一。

此外,正向传播也有助于理解神经网络中的信息流和非线性变换,有助于理解神经网络的计算过程和特征提取能力。正向传播的结果可以用于可视化神经网络的隐藏层特征,有助于理解神经网络中所学到的特征和模式。

无监督模型不需要人工标注标签,是否无法完成第二个步骤(反向传播)?为什么?

无监督学习模型也需要进行反向传播,但是与有监督学习不同,它不需要标签作为目标输出,而是通过学习数据的内在结构来调整神经网络的权重。

在无监督学习中,通常会使用一些自编码器(autoencoder)等无监督学习模型,通过自编码器将输入数据压缩成低维的特征向量,然后再将特征向量解码为与输入数据相同的维度。在训练过程中,无监督学习模型需要最小化重构误差,即输入数据与解码后的数据之间的差异。

在反向传播中,无监督学习模型会计算重构误差对于神经网络参数(包括权重和偏置)的梯度,并根据梯度调整网络参数,从而使得神经网络的重构误差逐渐减小。这个过程与有监督学习中的反向传播类似,但是无监督学习模型的反向传播不需要使用标签来计算误差。

需要注意的是,无监督学习的反向传播过程中并不会计算输出与目标之间的误差,而是使用一些不同的损失函数来衡量模型的性能,如重构误差、对比损失等。因此,虽然无监督学习不需要标签来进行训练,但它仍然需要进行反向传播来更新神经网络的权重和偏置。

第三个步骤(权重更新)所用的主要算法的基本原理?

第三个步骤中使用的主要算法是随机梯度下降(Stochastic Gradient Descent,SGD),它是深度学习中最基本和最常用的优化算法之一。

SGD的基本原理是根据损失函数的梯度信息来调整神经网络的权重和偏置,从而使得损失函数最小化。在每一轮训练中,SGD从训练集中随机选择一小批数据(称为mini-batch),计算这些数据的损失函数关于神经网络参数的梯度,然后使用梯度来更新神经网络参数,从而使得损失函数逐渐减小。

SGD的更新公式如下:

W = W - learning_rate * dW

其中,W表示神经网络的权重矩阵,dW表示损失函数关于权重矩阵的梯度,learning_rate表示学习率,它控制着每次参数更新的大小。

SGD有很多变体,如动量(Momentum)、AdaGrad、RMSProp、Adam等,它们都是在SGD的基础上做出的改进,用于加快模型训练、提高模型性能等。其中,动量算法(Momentum)通过加入一个动量项来平滑梯度下降的过程,加快收敛速度;AdaGrad算法可以自适应地调整学习率,从而更好地适应不同的参数;RMSProp算法通过对梯度进行平均来调整学习率,可以减少梯度的方差,从而更加稳定;Adam算法则结合了动量和自适应学习率的思想,具有更好的性能和收敛速度。

总之,SGD是深度学习中非常重要的优化算法,它通过使用梯度信息来调整神经网络的参数,使得损失函数最小化,从而实现对神经网络的训练和优化。同时,SGD的一些改进算法也可以帮助深度学习模型更快地收敛、更好地适应不同的数据分布和损失函数形式。

CNN图像识别所考虑的三个准则分别是?

1、局部性准则

2、参数共享准则

3、子采样准则

三个准则分别靠CNN的哪些网络层所实现的?

在CNN中,三个准则通常通过不同的网络层来实现:

  1. 局部性准则 - 卷积层
  2. 参数共享准则 - 卷积层
  3. 子采样准则 - 池化层

第2问中的各个网络层所起到的作用分别是什么?

  1. 卷积层 (Convolutional Layers):卷积层是CNN中最重要的层之一,它通过卷积运算来提取图像的特征。卷积层通常位于网络的前几层,它们可以检测图像中的低级特征,例如边缘、角、颜色等等。

  2. 池化层 (Pooling Layers):池化层通常紧随卷积层之后,用于降低特征图的维度和参数数量,同时可以帮助网络对图像的平移、缩放等变换具有一定的不变性。池化层通常使用最大池化或平均池化来实现。

  3. 全连接层 (Fully Connected Layers):全连接层通常位于网络的最后一层,用于将特征图映射到类别标签上。全连接层中的每个神经元都与前一层的所有神经元相连,每个输出神经元对应一个类别标签。全连接层通常使用softmax激活函数来计算每个类别的概率分布。

Keras程序理解

  • Keras实现CNN

使用MNIST数据集训练了一个简单的CNN模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 导入Keras和一些其他必要的库
import keras
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# 导入数据集
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# 将数据集reshape成4D张量
x_train = x_train.reshape((x_train.shape[0], 28, 28, 1))
x_test = x_test.reshape((x_test.shape[0], 28, 28, 1))
# 数据归一化
x_train = x_train / 255.0
x_test = x_test / 255.0
# 将标签one-hot编码
y_train = keras.utils.to_categorical(y_train)
y_test = keras.utils.to_categorical(y_test)


# 定义模型:
# 首先定义了一个Sequential模型,然后依次添加了卷积层Conv2D和池化层MaxPooling2D,最后是全连接层Dense
model = Sequential() # 首先定义了一个Sequential模型
# 对于Conv2D和MaxPooling2D,
# 第一个参数表示卷积核(或池化窗口)的数量,
# 第二个参数表示卷积核的大小。
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))# 序列模型加入32个*3*3大小的卷积核的卷积层(输入的形状28x28的灰度图像。在后续层中,输入形状会自动推断。激活函数使用ReLU)
model.add(MaxPooling2D((2, 2)))# 序列模型加入一个池化窗口大小2*2的池化层
model.add(Conv2D(64, (3, 3), activation='relu'))# 序列模型加入64个*3*3大小的卷积核的卷积层(激活函数使用ReLU)
model.add(MaxPooling2D((2, 2)))# 序列模型加入一个池化窗口大小2*2的池化层
model.add(Flatten())# 把多维的输入一维化,用在从卷积层到全连接层的过渡
# 在全连接层中,我们添加了两个Dense层。
model.add(Dense(64, activation='relu'))# 第一个Dense层有64个神经元,使用ReLU激活函数;
model.add(Dense(10, activation='softmax'))# 第二个Dense层有10个神经元,使用softmax激活函数,表示输出10个类别的概率。

# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])# 使用adam优化器、交叉熵损失函数和准确率作为评估指标

# 训练模型
model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_test, y_test))#使用训练集x_train和y_train来训练模型,指定了10个epoch,每个batch大小为32。同时,我们还使用了测试集x_test和y_test来验证模型的性能。

# 使用测试集评估模型
test_loss, test_acc = model.evaluate(x_test, y_test)# 使用测试集x_test和y_test来评估模型的性能,并输出测试集的准确率
print('Test accuracy:', test_acc)

真题.用卷积神经网络进行MNIST手写数字识别

image-20230219211742477

image-20230219211759114

其它基本与上面demo一致

1
2
3
4
5
(train_images,train_labels).(test_images.test_labels)=mnist.load_data() # 加载mnist数据集
train_images = train_images.reshape((60000.28.28.1)) # # 将数据集reshape成4D张量:6万张训练图片,数据维度转化,增加了通道维度
train_images = train_images.astype('float32')/255 # 归一化:将像素的值标准化至0到1的区间内。

train_labels = to_categorical(train_labels) # 将标签one-hot编码:将类别向量转换为二进制(只有0和1)的矩阵类型表示
  • Keras实现神经网络

用神经网络实现手写体数字识别

书37页

深度学习中单个神经元与线性回归,逻辑回归,分类问题之间的关系?

单个神经元是深度学习的基本构建块之一,通常用于解决分类问题。在深度学习中,单个神经元通常包括输入、权重、偏差和激活函数。单个神经元将输入值加权求和,加上偏差,然后将该总和传递给激活函数,以产生输出。

线性回归和逻辑回归也是解决分类问题的基本算法之一。在线性回归中,我们试图找到一个最适合数据的线性函数,该函数可以将输入变量映射到连续的输出变量。而在逻辑回归中,我们试图找到一个最适合数据的Sigmoid函数,该函数可以将输入变量映射到一个二元输出变量(0或1)。

从形式上看,单个神经元的计算过程与线性回归和逻辑回归非常相似。事实上,可以将线性回归和逻辑回归看作是一种特殊类型的神经网络,其中只有一个神经元。通过组合多个这样的神经元,我们可以构建更复杂的神经网络,以解决更复杂的分类问题。

独热编码的概念?

独热编码(One-Hot Encoding)是一种将分类数据转换为计算机可处理格式的编码方式。它将每个分类值映射到一个整数值,然后将这些整数值用一个二进制向量表示,其中只有一个位置是 1,其余位置都是 0。这个唯一的位置对应于整数值,表示该分类值的存在。

例如,假设有一个颜色变量,可能的取值为 “red”、“green” 和 “blue”。将这些取值转换为独热编码将得到:

颜色 red green blue
red 1 0 0
green 0 1 0
blue 0 0 1

通过使用独热编码,可以将分类变量转换为计算机可以处理的形式,并可以在机器学习模型中使用这些编码变量。

词嵌入模型的工作原理?

词嵌入模型是一种将自然语言文本中的单词映射到实数值向量的技术。它能够捕捉单词之间的语义和上下文关系,并为自然语言处理(NLP)任务提供了有用的表示。

词嵌入模型的工作原理可以分为以下几个步骤:

  1. 数据预处理:首先需要对文本进行预处理,例如分词、去除停用词等。

  2. 建立词汇表:将预处理后的文本中所有的单词建立一个词汇表,每个单词对应一个唯一的整数标识。

  3. 训练模型:通过对大量的语料库进行训练,词嵌入模型可以学习到每个单词的向量表示。其中,最常用的词嵌入模型是 Word2Vec 和 GloVe。

  4. 应用模型:训练好的模型可以用于不同的NLP任务,例如情感分析、文本分类、命名实体识别等。

Word2Vec 模型使用两种不同的架构进行训练,分别为连续词袋模型(CBOW)和Skip-Gram模型。CBOW模型根据上下文单词来预测当前单词,而Skip-Gram模型则根据当前单词来预测上下文单词。GloVe模型则是基于全局统计信息进行训练,将单词之间的共现信息转换为向量表示。

总之,词嵌入模型利用机器学习算法将自然语言中的单词映射到低维向量空间中,从而能够有效地捕捉单词之间的语义和上下文关系。

词嵌入模型中为什么语义相近的词汇通常有相似的嵌入表示?

在词嵌入模型中,语义相近的词汇通常会被赋予相似的嵌入表示,这是因为词嵌入模型是基于语料库中的上下文信息进行训练的,而语义相近的单词通常会在上下文中出现在类似的语境中。

例如,在一个包含 “apple”、“orange” 和 “banana” 的语料库中,这些单词可能会在 “水果” 的上下文中出现,因此它们会被认为在语义上相近。如果我们使用 Word2Vec 模型进行训练,它会学习到将这些单词映射到低维向量空间中的向量表示。由于它们在上下文中的共现信息相似,所以它们在向量空间中的距离也会比较接近。

另外,词嵌入模型还可以通过使用负采样(Negative Sampling)等技术来调整单词之间的相似度。通过在训练过程中引入噪声单词,并使嵌入向量在某些方向上更多地适应噪声单词,我们可以更好地调整词向量的相似度,并更准确地捕捉单词之间的语义关系。

因此,词嵌入模型之所以能够为语义相近的单词学习到相似的向量表示,是因为它利用了语料库中单词的上下文信息,并通过训练过程中的优化算法来调整单词之间的相似度。

从网络结构,输入数据形式和数据之间的关联,提取数据特征的相关性,各隐藏层神经、DNN,CNN,RNN,GCN异同?

DNN(深度神经网络),CNN(卷积神经网络),RNN(循环神经网络),GCN(图卷积神经网络)

神经网络是一种用于机器学习和深度学习的模型,它由输入层、隐藏层和输出层组成。隐藏层是神经网络的核心,它可以提取数据的特征并将其转化为更高层次的表示。神经网络的结构可以根据不同的任务和数据类型进行优化。

以下是一些不同类型的神经网络以及它们之间的区别:

  1. DNN(深度神经网络):DNN由多个隐藏层组成,每个隐藏层都包含多个神经元,每个神经元都与上一层的所有神经元相连。DNN通常用于处理结构化数据,如数字或文本,其输入数据形式通常是向量或矩阵。

  2. CNN(卷积神经网络):CNN通过使用卷积层和池化层提取输入数据的特征,以适应图像、视频和语音等非结构化数据的处理。卷积层会对输入数据进行局部卷积操作,以提取输入数据的局部特征,而池化层则会对卷积层的输出进行降采样,以减少数据的维度。CNN的输入数据形式通常是图像、音频或视频等多维数组。

  3. RNN(循环神经网络):RNN的隐藏层神经元之间形成循环结构,使得前一时刻的输出可以作为当前时刻的输入。这使得RNN适用于处理序列数据,如时间序列、自然语言和音频数据。RNN通过使用门控单元(如LSTM或GRU)来解决长期依赖问题,以避免梯度消失或梯度爆炸的问题。

  4. GCN(图卷积网络):GCN是一种用于处理图数据的神经网络,其输入数据通常是节点和边的列表。GCN通过使用卷积层来学习节点的嵌入表示,以提取图的结构信息和节点之间的关系。GCN还使用池化层来减少节点的数量,以适应更大的图。

总的来说,不同类型的神经网络适用于不同类型的数据和任务,它们通过不同的方式提取和处理数据的特征,并将其转化为更高层次的表示。

单个神经元作用小,多个大?

单个神经元作用小的原因在于它只能对输入数据做出非常简单的线性变换和激活操作,很难对复杂的模式和特征进行捕捉。而多个神经元可以通过组合和并行处理不同的输入特征,提取更复杂的特征表示,从而更好地完成任务。

具体来说,多个神经元的组合可以实现更复杂的非线性函数,能够学习更丰富的特征表示。同时,隐藏层的深度越多,神经元的数量也越多,神经网络的表达能力也会更加强大。这意味着神经网络可以对数据进行更深入的学习和建模,从而更准确地预测结果。

此外,多个神经元还可以通过并行处理输入数据的不同方面来提高效率和准确性。比如,在图像分类任务中,一个神经元可能专门处理边缘特征,另一个神经元则处理颜色和纹理特征,多个神经元的组合可以更好地捕捉图像中的多个方面特征。

因此,多个神经元通常可以提高神经网络的表达能力和性能,使其更好地适应复杂的数据和任务。

现有深度学习模型的局限性?

深度学习模型已经在许多领域中取得了显著的进展,如图像识别、自然语言处理、语音识别等。然而,深度学习模型仍然存在一些局限性:

  1. 数据需求量大:深度学习模型需要大量的标注数据来进行训练,而这些数据往往需要人工标注,成本较高。缺乏足够的数据可能会导致过拟合,从而影响模型的性能。
  2. 模型复杂性高:深度学习模型通常由多个层和大量的参数组成,需要消耗大量的计算资源和时间进行训练。此外,模型结构的设计和调整也需要高度的专业知识和经验。
  3. 可解释性差:深度学习模型通常是黑盒模型,其决策过程和内部表示难以理解和解释。这使得深度学习模型在某些需要解释和可靠性保证的场景中受到限制,如医疗诊断和司法决策等。
  4. 对抗攻击易受影响:深度学习模型容易受到对抗性样本的攻击,即对模型输入进行微小的修改,可以使模型做出错误的决策。这对于安全性和可靠性的场景来说是一项重要的挑战。
  5. 数据分布偏差:深度学习模型在训练过程中可能会受到数据分布偏差的影响,即训练集与实际应用场景的数据分布不一致,从而影响模型的泛化能力。
  6. 缺乏因果关系:深度学习模型通常只能捕捉数据之间的相关性,而难以建立因果关系。这意味着深度学习模型可能无法解释事件之间的因果关系,从而在一些决策和预测场景中受到限制。

以上是深度学习模型目前存在的一些局限性,这些局限性需要通过不断的研究和技术创新来解决,以进一步提高深度学习模型的性能和可靠性。

分别通过DNN,CNN,GCN刻画城市各个路段的车速的空间相关性?

针对城市路段的车速数据,可以使用不同的神经网络架构来刻画其空间相关性,包括深度神经网络(DNN),卷积神经网络(CNN)和图卷积网络(GCN)。以下是每种神经网络架构的示例用法:

1、DNN(深度神经网络):

深度神经网络是一种前馈神经网络,其目的是从输入数据中学习一个映射函数,以预测目标变量。在此场景下,输入是车速数据,目标变量是城市各个路段的车速空间相关性。具体来说,可以使用多层感知器(MLP)模型,该模型具有多个隐藏层,并使用非线性激活函数来建模输入数据中的复杂关系。通过使用DNN,可以学习路段之间的非线性依赖性,并预测城市中各个路段之间的车速相关性。

2、CNN(卷积神经网络):

卷积神经网络是一种专门用于处理具有网格结构输入数据的神经网络,如图像和时间序列数据。在城市路段的车速数据中,可以将每个路段的车速数据视为时间序列数据,并使用卷积神经网络来刻画空间相关性。在这种情况下,CNN可以看作是一种序列模型,其中每个路段的车速数据作为序列中的一个时间步骤。通过使用CNN,可以学习城市中不同路段之间的时空相关性,并预测路段之间的车速相关性。

3、GCN(图卷积神经网络):

图卷积神经网络是一种专门用于处理图数据的神经网络,其中节点之间的连接形成了一个图结构。在城市路段的车速数据中,可以将每个路段视为图中的一个节点,并使用车速数据中的空间关系来建立图的连接。使用GCN,可以学习城市中不同路段之间的空间相关性,并预测路段之间的车速相关性。

科学计算与数学建模

课程学习内容:

机器学习基础、线性回归、偏差和方差、梯度下降、分类、逻辑回归

深度学习概述、反向传播和Keras编程、卷积神经网络CNN

为何需要深层次的网络、自编码器、词嵌入模型、循环神经网络

Meta LearningAE attack

一、线性回归

线性模型假设 y=b+wxcpy = b + w·x_{cp} ,所以 wwbb 可以猜测很多模型(得到线性模型函数集)

f1:y=10.0+9.0xcpf2:y=9.8+9.2xcpf3:y=0.81.2xcpf_1: y = 10.0 + 9.0·x_{cp} \\ f_2: y = 9.8 + 9.2·x_{cp} \\ f_3: y = - 0.8 - 1.2·x_{cp} \\ ···

问题转换为:从猜测的函数集中找到合适的y=b+w·xcp x_{cp}函数刻画以上所有数据集的模型

如何找到最合适的函数

引入_损失函数

损失函数**L(f)是函数f=b+w·xcp x_{cp}**的函数

input:a function output:how bad it is

常见L(f)的定义方法——估计误差

L(f)=L(w,b)=n=1N(y^n(b+wxcpn))2\begin{aligned} \mathrm{L}(f) &=\mathrm{L}(w, b) \\ &=\sum_{n=1}^{N}\left(\hat{y}^{n}-\left(b+w \cdot x_{c p}^{n}\right)\right)^{2} \end{aligned}

  • y^n\hat{y}^{n}真正数值,(b+wxcpn)(b+w \cdot x_{c p}^{n})为当前函数的预测数值

  • 将每一只宝可梦(真正数值-预测数值)的平方和就是估测误差

问题转换为:从猜测的函数集中找到损失函数L(f)最小的函数

求出所有可能的模型的损失函数太费时

引入_梯度下降

f=argminfL(f)f^{*}=\arg \min _{f} L(f)

w,b=argminw,bL(w,b)=argminw,bn=110(y^n(b+wxcpn))2\begin{aligned} w^{*}, b^{*} &=\arg \min _{w, b} L(w, b) \\ &=\arg \min _{w, b} \sum_{n=1}^{10}\left(\hat{y}^{n}-\left(b+w \cdot x_{c p}^{n}\right)\right)^{2} \end{aligned}

表示当函数L(f)取f=ff=f^{*}的时候,得到L(f)取值范围的最小值

问题转换为:求w,bw^{*}, b^{*}使得L(f)取值范围的最小值

先从最简单的只有一个参数ww入手,定义w=arg minxL(w)w^* = arg\ \underset{x}{\operatorname{\min}} L(w)

问题转换为:求w,w^{*}, 使得L(w)取值范围的最小值

引入一个概念 学习率 :移动的步长

image-20221005230548704
  • 步骤1:随机选取一个 w0w^0

  • 步骤2:计算微分,也就是当前的斜率,根据斜率来判定移动的方向

    • 小于0向右移动(减少ww
    • 大于0向左移动(增加ww
  • 步骤3:根据学习率移动

  • 重复步骤2和步骤3,直到找到最低点

以上步骤能找到极小点,而在回归中极小点就是唯一最小点(No local optimal,疑问🤔️后面会讲)

计算

dLdww=w0\left.\frac{d L}{d w}\right|_{w=w^{0}}

w1w0ηdLdww=w0w^{1} \leftarrow w^{0}-\left.\eta \frac{d L}{d w}\right|_{w=w^{0}}

又当同时考虑两个参数的时候

计算

Lww=w0,b=b0,Lbw=w0,b=b0\left.\frac{\partial L}{\partial w}\right|_{w=w^{0}, b=b^{0}},\left.\frac{\partial L}{\partial b}\right|_{w=w^{0}}, b=b^{0}

w1w0ηLww=w0,b=b0b1b0ηLbw=w0,b=b0w^{1} \leftarrow w^{0}-\left.\eta \frac{\partial L}{\partial w}\right|_{w=w^{0}, b=b^{0}} \quad b^{1} \leftarrow b^{0}-\left.\eta \frac{\partial L}{\partial b}\right|_{w=w^{0}, b=b^{0}}

同理No local optimal无局部最优

整理成一个简介的公式,即梯度

L=[LwLb] gradient \nabla L=\left[\begin{array}{l} \frac{\partial L}{\partial w} \\ \frac{\partial L}{\partial b} \end{array}\right] \text { gradient }

以上操作就可以得到线性回归的损失函数最小模型

小插曲:如何评价模型?

image-20221006203707421

N10n=1Nen,其中en为点到模型的距离\frac{N}{10} \sum_{n=1}^{N} e^{n},其中e^{n}为点到模型的距离

一般训练集会比测试集的小,因为原本模型求解损失函数最小就是基于训练集的

是否有更好的1元N次线性模型

y=b+w1xcp+w2(xcp)2y=b+w_{1} \cdot x_{c p}+w_{2} \cdot\left(x_{c p}\right)^{2}

同理通过梯度下降求解最小损失函数时的b,w1,w2b,w_{1},w_{2}

…还可以使用更高次方的模型

在训练集上面表现更为优秀的模型,为什么在测试集上效果反而变差了

小插曲:过拟合问题的出现?

如图所示,每一个模型结果都是一个集合,5次模型包4次模型3次模型5次模型包 \supseteq 4次模型 \supseteq 3次模型所以在4次模型里面找到的最佳模型,肯定不会比5次模型里面找到更差

将错误率结果图形化展示,发现3次方以上的模型,已经出现了过拟合的现象:

image-20221006205944392

优化

  • Step1优化:2个input的四个线性模型是合并到一个线性模型中

  • Step2优化:如果希望模型更强大表现更好(更多参数,更多input)

  • Step3优化:加入正则化

    • 更多特征,但是权重 ww 可能会使某些特征权值过高,仍旧导致overfitting,所以加入正则化image-20221006211713472
      • wiw_i越小,越平滑的function。但过小又回成水平线。需要调参λ\lambda,找到最合适的image-20221006212324682

二、偏差与方差

数据模型的复杂度

考虑的数据模型越复杂,训练效果越好,而预测可能出现过拟合现象。

方差与偏差

.方差与偏差和模型的复杂关系是什么\textcolor{red}{考.方差与偏差和模型的复杂关系是什么}

  • 来自ChatGPT

方差和偏差是评估机器学习模型性能的两个重要指标。它们之间存在一定的关系,特别是与模型复杂度有关。

偏差是指模型的预测值与真实值之间的差异,它衡量的是模型的拟合能力。偏差大的模型容易欠拟合,即对训练数据的拟合不够好,而对测试数据的预测能力也会较差。

方差是指模型预测值的变化范围,它衡量的是模型的泛化能力。方差大的模型容易过拟合,即对训练数据的拟合过于好,而对测试数据的预测能力较差。

在模型复杂度较低时,偏差通常很高,方差很低。这是因为简单的模型可能无法很好地拟合数据,因此在不同的训练数据上得到的预测结果差别不大,方差较小。但是,在不同的训练数据上得到的预测结果与真实值之间的差距较大,偏差较高。

随着模型复杂度的增加,偏差逐渐降低,方差逐渐增加。这是因为复杂的模型可以更好地拟合数据,因此在不同的训练数据上得到的预测结果与真实值之间的差距较小,偏差较低。但是,复杂的模型也容易过拟合,即对训练数据的拟合过于好,而对测试数据的预测能力较差,方差较高。

因此,选择合适的模型复杂度可以在偏差和方差之间取得平衡,从而达到较好的预测性能。一般而言,可以使用交叉验证等技术来帮助选择合适的模型复杂度。

.判断如果你的模型甚至不能拟合训练样本,那么你就有很大的偏差\textcolor{red}{考.判断-如果你的模型甚至不能拟合训练样本,那么你就有很大的偏差}

正确:欠拟合,大偏差

以下ppt前一页即是考试题的解释

image-20220920173540229

欠拟合:对训练样本的一般性质尚未学好。在训练集及测试集上的表现都不好。\longrightarrow偏差大

  • 低拟合简单的模型会有大的偏差,小的方差;重建你的模型,比如增加更多的特征,换个复杂模型

  • 过拟合复杂的模型会有小的偏差,大的方差;增加数据没法增加数据时=>规则化,

欠拟合与过拟合

欠拟合:对训练样本的一般性质尚未学好。在训练集及测试集上的表现都不好。\longrightarrow偏差大

过拟合:训练集的训练效果好,但是测试集上的效果不好。\longrightarrow方差大

解决路线
image-20230202194701119
  • 训练集loss

    • 大 ->

      • model bias问题

        • 增加模型复杂度
      • optimization问题

    • 小 -> 测试集loss

      • 大 ->

        • overfitting问题

          • 更多训练数据
          • 数据扩展
          • 降低模型弹性
        • mismatch问题

          • (训练集与测试集分布差得多)
      • 小 -> success

注意

  • model够不够大

    • 一个建议判断方法

      • image-20230202194741271
  • overfitting的极端例子

    • x当做输入的时候,我们就去比对这个x,有没有出现在训练集裡面,如果x有出现在训练集裡面,就把它对应的ŷ当做输出,如果x没有出现在训练集裡面,就输出一个随机的值

神经网络Neural Network

神经网络的基础:神经元

image-20221020113246762

激活函数

image-20221020113339209
神经网络
image-20221020113611322

多个神经元组成一个隐藏层,多个隐藏层以及输入和输出层构成了一个神经网络:

image-20221020115610406
课后作业.神经网络泛化\textcolor{red}{课后作业.神经网络泛化}-2022-9-23

神经网络为什么不会一直过拟合,反而有良好的泛化能力。

  • 来自CharGPT

神经网络之所以能够在训练数据上进行良好的拟合,同时又具有较好的泛化能力,是由于神经网络本身具有一些特性和训练方法可以避免过拟合并提高泛化能力。以下是一些可能的原因:

  1. 参数共享:神经网络中的参数通常是共享的,即多个神经元使用相同的权重,这样可以使得网络更加简单,降低过拟合的风险。

  2. 正则化:正则化是一种降低模型复杂度的方法,它通过在损失函数中添加惩罚项来避免模型过度拟合训练数据。在神经网络中,L1正则化和L2正则化都可以有效地降低模型复杂度,并提高泛化能力。

  3. 数据增强:数据增强是通过一些变换方法扩充原始训练数据的方法。通过数据增强,可以使得训练数据更加丰富多样,从而提高模型的泛化能力。

  4. 集成学习:集成学习是将多个不同的模型进行组合以获得更好的泛化能力的方法。在神经网络中,常见的集成学习方法包括Dropout和Bagging等。

  5. 停止训练的时机:神经网络的训练过程通常会进行多个epoch,但是在一定程度上,过多的训练容易导致过拟合。因此,可以设置一些停止训练的条件,如达到一定的训练次数或者验证集误差不再下降等,以避免过度拟合。

综上所述,神经网络能够在训练数据上获得良好的拟合效果并具有较好的泛化能力,是由于神经网络具有一些特性和训练方法可以避免过拟合,并提高泛化能力。

偏向于拟合光滑函数,从而捕获到数据中出现的全局性结构而不是过度拟合单个样本。

  • 泛化能力(generalization ability)是指机器学习算法对新鲜样本的适应能力。

Linear Regression(线性回归)

Step 1: Model

建立模型

image-20221020121437926

Step 2: Goodness of Function

评判方程的效果好坏

image-20221020122319077

Step 3: Best Function

通过梯度下降的方式选出最好的方程式

1️⃣

image-20221020122614363

2️⃣先单独考虑一个变量的梯度

image-20221020123116925

3️⃣之后考虑多个变量的梯度

image-20221020123234604

得到的梯度如下:

image-20221020124419692

示意图:

image-20221020124605173

梯度下降可能会收敛到局部最优:

image-20221020124806461

计算平均误差

image-20221020125549475

分别计算Training Data和Testing Data的平均误差,之后比价两者的平均误差发现后者的平均误差一般比前者的平均误差大,毕竟函数式y=b+wxcpy=b+w\cdot x_{cp}是由Training Data训练得到的。

以上一次方程的误差较大,这个时候我们可以采用高次多项式来拟合数据:

比如:

image-20221020130102700

image-20221020130121830

越复杂的模型对Training Data的平均误差越小,但是对Testing Data的平均误差却可能很大,这就是过拟合:

image-20221020130335681 image-20221020130503210

我们应该选择对Training Data和Testing Data的平均误差都很小,且两者的平均误差相差不大的模型。

Regulation规整化(正则化)
image-20221020144310277

正则化可以解决过拟合问题:通过使权重衰减,降低实际结果与预测结果之差的累和对整体结果的影响,从而使得方程的曲线更加的光滑,而一般认为光滑的方程更可能是正确的。

参考:(77条消息) 正则化为什么可以防止过拟合_jk英菲尼迪的博客-CSDN博客_正则化为什么能防止过拟合

Logistic Regression(逻辑回归)

什么是生成模型?

计算一个给定的x是属于哪个类型的,比较P(C_1|x)和P(C_ 2 | x)的值,哪个类别的概率大x就属于哪个类别。

P(C_1|x)和P(C_ 2 | x)的值将从训练集中获得。

image-20221028231017004

监督学习方法可以分为生成方法(generative approach)和判别方法(discriminative approach)。所学到的模型分别称为生成模型(generative model)和判别模型(discriminative model)。生成方法由数据学习联合概率分布,然后求出条件概率分布作为预测的模型,即生成模型。

机器学习的三步骤:

  1. 定义模型

  2. 定义损失函数——方法:梯度下降

  3. 进行函数求解

1️⃣梯度下降

梯度下降参考:梯度下降算法(Gradient Descent)的原理和实现步骤 - 知乎 (zhihu.com)

多次求解求平均得到平滑曲线。

梯度下降的目的,就是为了最小化损失函数。

preview

此时如果求出A点的梯度 ,便可以知道如果我们向右移动,可以使损失函数的值变得更小。

学习率

如果学习率 α 设置得过大,有可能我们会错过损失函数的最小值;如果设置得过小,可能我们要迭代式子非常多次才能找到最小值,会耗费较多的时间。因此,在实际应用中,我们需要为学习率 α 设置一个合适的值。

设置学习率的两种方法

学习率衰减参考:机器学习 | 优化——调整学习率 - 简书 (jianshu.com)

概述:

学习率在一开始要保持大些来保证收敛速度,在收敛到最优点附近时要小些以避免来回震荡。

实例:

E.g. 1t\frac{1}{t} decay: ηt=η/t+1\eta^t=\eta / \sqrt{t+1}

Adagrad算法wt+1wtηi=0t(gi)2gtw^{t+1} \leftarrow w^t-\frac{\eta}{\sqrt{\sum_{i=0}^t\left(g^i\right)^2}} g^t

 |First derivative|  Second derivative \frac{\text { |First derivative| }}{\text { Second derivative }}\longrightarrow通过一阶衍生物的绝对值除以二阶衍生物得到最好的步长。

EI会议:1、2、3阶——分数降低或者不算

搞清论文问题和研究是方向/算法的改进点等。\textcolor{red}{搞清论文问题和研究是方向/算法的改进点等。}

课后作业.协方差矩阵Σ相同accuracy增加\textcolor{red}{课后作业.协方差矩阵Σ相同accuracy增加}-2022-9-27

思考Σ相同的时候,accuracy为什么会增加?

image-20220927173552056

协方差矩阵Σ 是一个对称矩阵,协方差矩阵,因而决定了多维高斯分布的形状。协方差矩阵Σ是和输入特征(大小)的平方成正比,所以当特征很多的时候,协方差矩阵是可以增长很快的。此时考虑到模型参数过多时候就容易过拟合,而共用协方差矩阵的话会使得参数变少,过拟合变弱了,准确率也就上升了。

模型参数过多,就容易发生过拟合,共用协方差矩阵使得参数变少,过拟合的程度变弱了,准确率也就上升了。

启动函数(激活函数):将范围限定在[0,1]

image-20220930081913017
交叉熵函数定义:
image-20220930083755084 image-20220930083930554 image-20221004160947492
课后作业.逻辑回归分界线\textcolor{red}{课后作业.逻辑回归分界线}-2022-9-30

能否找一条线将四个区分出来

image-20220930094126581

不能,逻辑回归的分界线是一条直线,而一条直线是不能将红蓝两类分开的,所以需要对特征进行转换,通过特征转换使得能够通过直线分开的红蓝两个特征。

转换为更有利于后面分类的特征。

六、深度学习

image-20221004163212224

神经网络:

  • 多少层

  • 每层多少神经元

分类问题使用交叉熵定义激活函数。

交叉熵:

image-20221004165848429

梯度下降

  • 随机梯度下降法的第一步是随机化整个数据集

  • 计算梯度

  • 不断反复,更新参数,直到得到最好的参数使得损失函数的值最小

具体流程:θ是一组包含权重和偏差的参数集合,随机找一个初试值,接下来计算一下每个参数对应偏微分,得到的一个偏微分的集合∇L就是梯度,有了这些偏微分,我们就可以不断更新梯度得到新的参数,这样不断反复进行,就能得到一组最好的参数使得损失函数的值最小。

.反向传播增加梯度下降效率\textcolor{red}{考.反向传播增加梯度下降效率}

  • 来自ChatGPT

反向传播是一种有效的训练神经网络的方法,可以通过计算网络参数对损失函数的梯度来进行梯度下降优化。

梯度下降是一种常用的优化方法,它通过沿着损失函数的负梯度方向更新网络参数,从而使得损失函数逐渐减小。然而,对于深度神经网络等复杂模型,损失函数往往具有大量的参数,使得梯度计算非常困难,从而导致优化过程非常缓慢。

反向传播通过使用链式法则,将损失函数的梯度从输出层向输入层依次传递,从而计算每个网络参数对于损失函数的梯度,从而加速了梯度下降的过程。具体来说,反向传播可以在一次前向传播计算中计算出所有权重的梯度,从而使得梯度下降的更新更加高效。

此外,反向传播的计算速度也得到了很大的提升,这主要得益于现代计算机的并行计算能力以及深度学习框架的优化。通过在计算图上高效地计算梯度,反向传播可以在较短的时间内完成整个神经网络的梯度计算,从而大大提高了梯度下降的效率。

因此,反向传播在训练深度神经网络等复杂模型时,可以大大加快梯度下降的速度,提高模型的训练效率和性能。

为什么使用反向传播可以增加梯度下降的效率?

image-20221004171211792

先前向传播计算链式求导得到输出值:

image-20221004172415410 image-20221004173135758

之后将得到的值依次往前面带入得到

sigmod函数可以作为激活函数,也是逻辑回归函数

卷积神经网络

看网课参考:

.ConvolutionMaxPooling计算\textcolor{red}{考.Convolution MaxPooling计算}

现有k * K的图片以及w* w的filter,使用filter最后能够得到的图片的大小?(可以推导出通用表达式)

包含1、2、3

1、Convolution计算过程:

1️⃣

image-20221007082531184

2️⃣

image-20221007082634487
2、Max Pooling

选出每个框中的最大元素作为该框的代表元素:

image-20221007084033973

经过Max Pooling之后,得到2 * 2的图片矩阵

image-20221007084331076

在CNN中,不一定需要Max Pooling步骤可能会出一个判断题!\textcolor{red}{可能会出一个判断题!}

3、Flatten
image-20221007084550253
Keras
image-20221007090017917

.ConvolutionMaxPooling计算\textcolor{red}{考.Convolution MaxPooling计算}

image-20221007091052106

假设我们input一个1 *28 * 28的image,你就可以写model.add(Convolution2D( 25, 3, 3, Input_shape=(28,28,1)))。通过convplution以后得到output是25 *26 26(25个filter,通过3 *3得到26 * 26)。然后做max pooling,2 *2一组选择 max value得到 25 *13 * 13

然后在做一次convolution,假设我在这选50个filter,每一个filter是3 *3时,那么现在的channel就是50。13 *13的image通过3 *3的filter,就成11 *11,然后通过2 *2的Max Pooling,变成了50 *5 *5

在第一个convolution layer里面,每一个filter有9个参数,在第二个convolution layer里面,虽然每一个filter都是3 *3,但不是3 *3个参数,因为它input channel 是25个,所以它的参数是3 *3 *25(225)

CNN的三个特点:

  1. 局部感知,简单来说,卷积核的大小一般小于输入图像的大小(如果等于则是全连接),因此卷积提取出的特征会更多地关注局部 —— 这很符合日常我们接触到的图像处理。而每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。

  2. 参数共享,参数共享最大的作用莫过于很大限度地减少运算量了。

  3. 多核,一般我们都不会只用一个卷积核对输入图像进行过滤,因为一个核的参数是固定的,其提取的特征也会单一化。这就有点像是我们平时如何客观看待事物,必须要从多个角度分析事物,这样才能尽可能地避免对该事物产生偏见。我们也需要多个卷积核对输入图像进行卷积。

CNN的应用:

  1. 图片

  2. 语音

  3. 文本

深度学习的模块化

问题1:为什么变高比变宽好呢?

image-20221011164416400

1️⃣直接利用四个训练集去训练分类器

image-20221011163822838

2️⃣先训练第一层分类器(base Classifier),再训练第二层分类器

  • image-20221011164008381
  • image-20221011164109653

问题2:深度学习和模组化有什么关系?

image-20221011164454264

普遍性定理

image-20221011170600015

.一隐藏层表所有函数而多层\textcolor{red}{考.一隐藏层表所有函数而多层}

  • 来自ChatGPT

虽然理论上一个具有足够数量的神经元的单层神经网络可以表示所有函数,但在实际应用中,使用多层神经网络可以更好地解决一些实际问题。以下是一些可能的原因:

  1. 更强的表达能力:深层神经网络具有更强的表达能力,可以更好地拟合具有复杂结构的数据。多层神经网络可以通过将低级特征组合成更高级别的特征,来学习数据中的更抽象的表示。

  2. 更好的泛化能力:深层神经网络可以通过训练过程中的参数共享、正则化等方式来避免过拟合,并且具有更好的泛化能力。与单层神经网络相比,深层神经网络通常能够更好地适应新的数据,从而获得更好的泛化性能。

  3. 更高的效率:深层神经网络通常可以通过并行计算等方式来加速模型训练和推断过程,从而在实际应用中具有更高的效率。此外,深层神经网络通常具有更少的神经元数量,因此可以更快地处理大规模数据集。

综上所述,尽管单层神经网络在理论上可以表示所有函数,但深层神经网络在实际应用中通常具有更好的表达能力、泛化能力和效率,因此在许多领域中得到广泛的应用。

一个隐藏层就可以表示所有函数,为什么要使用多层?

回:但是这个理论没有告诉我们的是,它只告诉我们可能性,但是它没有告诉我们说要做到这件事情到底有多有效率。没错,你只要有够多的参数,hidden layer够宽,你就可以描述任何的function。但是这个理论没有告诉我们的是,当我们用这一件事(我们只用一个hidde layer来描述function的时候)它其实是没有效率的。当你有more layer(high structure)你用这种方式来描述你的function的时候,它是比较有效率的。

无监督学习-深度自编码器
image-20221011173843036

Auto-encoder包含:

  • 编码
  • 解码
Recap PCA
image-20221014080432006
Deep Auto-encoder
image-20221014080448278
Deep Auto-encoder对噪声点的处理
image-20221014080904171

使用像素级的欧式距离进行计算的到的结果图片中的内容差距较大

image-20221014082534044
CNN UnPooling
image-20221014083346537
CNN Deconvolution
image-20221014083956044

对输入进行扩充,然后放入到一个新的convolution里面,最后实现deconvolution

深度学习和流形

流行的本质就是很多欧式空间粘贴在一起构成的空间

image-20221014091113179

深度学习的主要目的和功能之一就是学习编码映射和解码映射

  • 将带噪声的图像进行傅里叶变换

    • 在频域滤波,去除高频分量
  • 之后通过傅里叶的逆变换得到去噪之后的图片

局限性

  • 必须具有流行

  • 不同的类型需要不同的流行

  • 深度学习仍属于弱人工智能

.深度学习有效性的几何解释\textcolor{red}{考.深度学习有效性的几何解释}

image-20221014093604606 image-20221014093617698 image-20221014093708338
胞腔分解和等价类

.胞腔分解与等价类\textcolor{red}{考.胞腔分解与等价类}

  • 每一个胞腔对应于一个类

  • 所有彼此等价的点构成了背景空间中的一个胞腔

  • 编码映射诱导了胞腔的分解

  • 来自ChatGPT

胞腔分解和等价类是拓扑学中两个重要的概念,它们之间存在一定的关系。

胞腔分解是指将一个拓扑空间分解为一系列胞腔的并集,其中胞腔是指具有像拓扑结构的单元。胞腔分解是一种重要的拓扑空间描述方法,通常用于研究空间的拓扑性质。

等价类是指具有相同等价关系的元素组成的集合,其中等价关系是指满足自反性、对称性和传递性的关系。在拓扑学中,我们可以定义一个等价关系,使得空间中的点可以被分类为不同的等价类。这些等价类可以表示空间的拓扑结构,例如空间的连通性、同伦类型等。

在拓扑学中,一个空间的胞腔分解可以用于定义一个等价关系,使得空间中的点可以被分类为不同的等价类。具体来说,如果两个点可以通过一个或多个胞腔连通,则这些点被视为等价的。这种等价关系称为同伦等价,即这些点可以通过同伦变形相互转换,它们具有相同的同伦类型。

因此,胞腔分解和等价类是密切相关的,胞腔分解提供了一种描述空间拓扑结构的方法,而等价类则可以表示拓扑结构中的不同同伦类型。通过胞腔分解,我们可以研究空间的拓扑性质,并将其分类为不同的同伦类型。

.单词上下文互预测\textcolor{red}{考.单词上下文互预测}

image-20221025164317392

考试题为此页PPT的内容

RNN

循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN就能够很好地解决这类问题。

LSTM

长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。

下图存在Input Gate(输入门)、Output Gate(输出门)、Forget Gate(遗忘门):

image-20221021081347103

forget gate打开的时候代表的是记得,关闭的时候代表的是遗忘。

三个门均存在以下规则:

  • 当输入通过sigmod函数之后得到的值为0时,表明该门是关闭的;

  • 当输入通过sigmod函数之后得到的值为1时,表明该门是开启的;

.LSTM过程.门计算\textcolor{red}{考.LSTM过程.门计算}

image-20221021082133328

x1是输入

x2 = 1 ,输入被写入memory

x2 = -1 ,置零memory

x3 = 1 ,立即输出memory

image-20221021090718248

Forget gate门

  • = 1,保留记忆
  • = 0, 遗忘memory
image-20221021083024030

需要掌握以上计算步骤。

原始的神经元的输入和输出:

image-20221021090704835

将原来简单的neuron换成LSTM:

image-20221021090729363

LSTM需要的参数量(假设你现在用的neural的数目跟LSTM是一样的)是一般neural network的四倍。

LSTM基本流程图:
image-20221021091934708
对LSTM改进:
image-20221021091913677
  • xt是当前状态

参考:人人都能看懂的LSTM - 知乎 (zhihu.com)

怎么学RNN

问题:为什么RNN会有这种奇特的特性。有人会说,是不是来自sigmoid function,我们之前讲过Relu activation function的时候,讲过一个问题gradient vanish,这个问题是从sigmoid function来的,RNN会有很平滑的error surface是因为来自于gradient vanish,这问题我是不认同的。等一下来看这个问题是来自sigmoid function,你换成Relu去解决这个问题就不是这个问题了。跟大家讲个秘密,一般在train neural network时,一般很少用Relu来当做activation function。为什么呢?其实你把sigmoid function换成Relu,其实在RNN performance通常是比较差的。所以activation function并不是这里的关键点。

image-20221021093445621

RNN training的问题其实来自它把同样的东西在transition的时候反复使用。所以这个w只要一有变化,它完全由可能没有造成任何影响,一旦造成影响,影响都是天崩地裂的(所以gradient会很大,gradient会很小)。

单个样本可能会发生梯度消失的问题。

.为什么LSTM能够解决梯度消失的问题\textcolor{red}{考.为什么LSTM能够解决梯度消失的问题}

  • memory和输入时相加的

  • 这种累加效果一直存在,直到遗忘门关闭才会消失

  • 来自ChatGPT

LSTM(Long Short-Term Memory)是一种常用的循环神经网络(RNN)结构,相对于传统的 RNN,LSTM 可以更好地解决梯度消失的问题。LSTM 之所以能够解决梯度消失的问题,主要有以下两个原因:

  1. 长期记忆机制:传统的 RNN 中,当网络层数很多时,由于在反向传播时每一层的梯度会相乘,因此当梯度较小时,多层网络的梯度会变得非常小,从而导致梯度消失。而 LSTM 通过引入长期记忆机制,可以更好地处理长期依赖性,从而避免梯度消失问题的发生。在 LSTM 中,通过门控单元的机制,可以控制信息的流动和保留,从而能够更好地处理长序列数据。

  2. 反向传播中的梯度削减:另一个原因是 LSTM 的反向传播过程中,对梯度的处理方式有所改进。在 LSTM 的反向传播中,使用了一个特殊的误差反向传播算法(Backpropagation through time, BPTT),它可以在一定程度上避免梯度爆炸。当梯度过大时,LSTM 会通过削减梯度的方式,使梯度的范数不超过一个预设的值。这个预设的值可以通过裁剪梯度(gradient clipping)的方式来实现,从而避免梯度爆炸的问题。

综上所述,LSTM 通过引入长期记忆机制和反向传播中的梯度削减,可以更好地解决梯度消失和梯度爆炸的问题,从而能够更好地处理长序列数据。

首先将原始数据通过CNN或RNN提取出重要特征之后再放入到以下图中:

image-20221025162922359

图片搜索和语言搜索

图片搜索类似图片是用CNN

图片搜索使用CNN提取特征

语音搜索使用RNN提取向量

.图片搜索和语言搜索提取比较\textcolor{red}{考.图片搜索和语言搜索提取比较}

主图片CNN提取特征

从图片CNN提取特征

比较

主语音RNN提取向量

从语音RNN提取向量

比较

基于注意力的模型(Attension-based Model)

image-20221025170837297

最简易的基于注意力的模型V1

image-20221025171009500

基于注意力的模型V2

image-20221025171033162

machine阅读理解

image-20221025171654756

RNN & Structured learning

深度学习的攻防

Motivation
  • 期望机器学习的分类器对恶意的或非恶意的错误input具有一定的鲁棒性

  • 恶意软件检测以及网络入侵检测(spam malware intrusion detection)

noise像素点attack
image-20221028083946316

.无目标攻击和目标攻击公式\textcolor{red}{考.无目标攻击和目标攻击公式}

Non-target Attack:公式如上图所示

Targeted Attack:公式如上图所示

Constraint
image-20221028085925008
Attack的实现方式
image-20221028092228643 image-20221028092155726
Attack Approaches
image-20221028092832191
White Box与Black Box

白盒攻击:在知道模型的情况下对模型进行攻击(此时清楚算法的参数、结构等)

黑盒攻击:在不知道模型的情况下对模型进行攻击(此时不知道任何模型的结构或是参数)

黑盒攻击

image-20221101162010977

通过寻找图片样本输入到待攻击模型中训练之后得到结果,将训练的样本和结果用来训练自己的模型,这个时候可以训练出功能与待攻击模型相似的可知具体模型结构的自建模型,此时能够对自建模型进行attack的对抗样本也很有可能对待攻击模型产生相同的攻击效果。

通过待攻击模型得到的结果来训练自己模型的详细过程:

image-20221101165240517

Defense

Two types:

  • 被动防御(passive defense)

    • 方式一:加入一个过滤器(Filter)
      • image-20221101172424920
    • 方式二:判断max(d1,d2)>T
    • 方式三:resizing layer in CNN
      • 原始图片在resizing过程中的稳定性好
      • 对抗样本在resizing过程中的稳定差
  • 主动防御(proactive defense)

    • image-20221101173503967

Meta Learning

Meta Learning=learn to learn

Machine Learning:寻找函数f的能力

Meta Learning:寻找函数f的函数F的能力

12周上实验课\textcolor{red}{12周上实验课}

Meta Learning流程

确定函数F(建立模型)

image-20221104081912906

最后返回的函数f是一个结构(网络结构)。

F<NS,Init,Update>

  • NS:Network Structure

  • Init:初始化

  • Update:更新

定义函数F的好坏

image-20221104083014964 image-20221104083512570

定义损失函数F,并找到最好的损失函数

image-20221104083452206

MAML

image-20221104090226044 image-20221104091213991

Model Pre-training

先有大数据训练集训练得到NS,之后再将NS作为参数并使用小数据量的数据集进一步调整NS

image-20221104091857201 image-20221104093925342
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023-2024 Guijie Wang
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信