深度学习面试总结(上岸版~)

devtools/2024/11/13 9:08:00/

2024/04/29面试

问题1:支持向量机理解

        支持向量机(Support Vector Machine,SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier)。其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk),并在求解系统中加入了正则化项以优化结构风险(structural risk),因此是一个具有稀疏性和稳健性的分类器。

        SVM的一个重要特性是通过核方法(kernel method)进行非线性分类,这使其成为常见的核学习(kernel learning)方法之一。在SVM中,支持向量起决定作用,它们是在训练过程中确定的,并且最终的决策函数只由少数的支持向量所确定。这种特性使得SVM在计算复杂性上有所优化,因为计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种程度上避免了“维数灾难”。

问题2:激活函数

        激活函数(Activation Function)在人工神经网络的神经元上运行,负责将神经元的输入映射到输出端。它在神经网络中起着至关重要的作用,因为它能够给神经网络加入一些非线性因素,使得神经网络能够很好地解决复杂的问题。

        如果不使用激活函数,神经网络中的每一层的输出只是承接了上一层输入函数的线性变换,无论神经网络有多少层,输出都是输入的线性组合,这大大限制了神经网络的表达能力。而激活函数的主要特性之一就是把非线性特性引入网络中,即激活函数有“掰弯”的能力,能够增强网络关注的特征,减弱不关注的特征,从而提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。

常见的激活函数包括:

  1. Sigmoid函数:常用于二分类问题,可以将输入转换为0到1之间的值。
  2. Tanh函数:类似于Sigmoid函数,但可以将输入转换为-1到1之间的值。
  3. ReLU函数:可以将输入值转换为非负值。
  4. Leaky ReLU函数:与ReLU函数类似,但当输入值小于0时,其输出值不为0。
  5. ELU函数:与Leaky ReLU函数类似,但当输入值小于0时,其输出值会更小。
  6. Softmax函数:常用于多分类问题,可以将输入转换为概率值。

激活函数的发展经历了从Sigmoid到Tanh,再到ReLU、Leaky ReLU等的过程,每种激活函数都有其特点和适用场景。在实际应用中,需要根据问题的特性和需求选择合适的激活函数。

问题3:1*1卷积神经网络

1x1卷积神经网络(1x1 Convolutional Neural Network)是卷积神经网络(CNN)中的一种特殊类型的卷积层。尽管其名字可能让人误以为它只能处理1x1的图像或特征图,但实际上,1x1卷积可以在任何大小的输入特征图上进行操作。

1x1卷积的主要作用包括:

  1. 降维/升维:通过调整1x1卷积的输出通道数,可以有效地减少或增加特征图的深度(即通道数)。这在需要减少模型复杂度或增加模型表示能力时非常有用。
  2. 增加非线性:由于1x1卷积后面通常会接激活函数(如ReLU),因此它可以为网络引入更多的非线性,从而增强模型的表达能力。
  3. 跨通道信息交互:1x1卷积允许不同通道的特征图之间进行信息交互,这有助于模型学习到更复杂的特征表示。

深度学习中,尤其是在处理图像数据时,1x1卷积经常与其他类型的卷积层(如3x3或5x5卷积)结合使用,以构建更强大、更高效的模型。例如,在Google的Inception网络中,1x1卷积被广泛用于减少特征图的维度,从而在不显著增加计算复杂度的情况下提高模型的性能。

问题4:BN层

BN层,即Batch Normalization层,是深度学习中常用的一种方法,用于加速神经网络的收敛速度,并且可以减小模型对初始参数的依赖性,提高模型的鲁棒性。它的主要作用如下:

  1. 加快网络的训练和收敛的速度:在深度神经网络中,如果每层的数据分布都不一样,会导致网络非常难收敛和训练。而如果把每层的数据都转换到均值为零、方差为1的状态下,这样每层数据的分布都是一样的,训练会比较容易收敛。
  2. 控制梯度爆炸并防止梯度消失:BN层通过归一化操作,使得每一层的输入都具备类似的分布,从而有效地减少了梯度消失和梯度爆炸的问题。
  3. 防止过拟合:BN的使用使得一个mini-batch中所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果。即同样一个样本的输出不再仅仅取决于样本的本身,也取决于跟这个样本同属一个batch的其他样本。而每次网络都是随机取batch,这样就会使得整个网络不会朝这一个方向使劲学习,一定程度上避免了过拟合。

BN层的原理是将每个mini-batch数据进行归一化处理,即将每个特征的均值和方差分别减去和除以当前mini-batch数据的均值和方差,以使得每个特征的数值分布在一个相对稳定的范围内。此外,为了保证模型的表达能力,BN层还引入了两个可学习参数gamma和beta,用于调整归一化后的特征值的范围和偏移量。

总的来说,BN层通过其归一化和调整机制,显著提高了神经网络的训练效率和模型性能,是深度学习模型构建中不可或缺的一部分。

问题5:pytorch的dataloder和dataset有什么区别

PyTorch中的DataLoaderDataset是两个不同的概念,它们在数据处理和模型训练过程中各自扮演着不同的角色。

Dataset

  • Dataset是一个抽象类,用于表示数据集。任何自定义的数据集都需要继承这个类,并实现其中的__len____getitem__这两个方法。
  • __len__方法用于返回数据集的大小,即样本的数量。
  • __getitem__方法用于根据索引返回单个样本及其对应的标签(如果有的话)。这样,你可以通过索引来访问数据集中的任何一个样本。
  • Dataset的主要作用是提供一个统一的数据访问接口,使得数据的获取和预处理变得更加方便和灵活。

DataLoader

  • DataLoader是一个用于数据加载的工具类,它组合了Dataset和采样器(sampler),并在数据集上提供单线程或多线程的可迭代对象。
  • DataLoader的主要作用是将数据集转化为一个可迭代对象,使得在模型训练过程中可以方便地按批次(batch)获取数据。
  • 通过设置batch_size参数,DataLoader可以自动将数据划分为指定大小的批次。
  • shuffle参数用于控制是否在每个训练周期开始时打乱数据的顺序。
  • num_workers参数用于指定用于数据加载的子进程数,可以提高数据加载的速度。
  • DataLoader还提供了其他一些有用的功能,如多线程加载、数据预取等,以进一步优化数据加载的性能。

区别与联系

  • Dataset定义了数据的结构以及如何从索引访问单个样本,而DataLoader则负责从Dataset中批量地、高效地加载数据。
  • 在模型训练过程中,你通常会先定义一个Dataset类来表示你的数据集,然后将其传递给DataLoader来创建一个可迭代对象,用于在训练循环中按批次获取数据。

总之,DatasetDataLoader在PyTorch中协同工作,使得数据的处理和加载变得更加高效和灵活。


http://www.ppmy.cn/devtools/24454.html

相关文章

Django模板查找顺序

Django模板查找顺序 首先看django项目的settings.py文件中是否定义DIRS 如果有定义,首先去这个目录下面查找(根目录下templates),找到了后续就不找了;如果没有,就顺着app的注册顺序进行查找

docker学习笔记1:什么是docker

目录 什么是dockerDocker 的主要组件学习 Docker 的步骤资源和教程什么是docker docker官网:https://www.docker.com Docker 是一个开源的应用容器引擎,它允许开发者打包应用以及应用的运行环境到一个可移植的容器中,然后发布到任何支持 Docker 的平台上运行。这种打包方式…

PaddlePaddle与OpenMMLab

产品全景_飞桨产品-飞桨PaddlePaddle OpenMMLab算法应用平台

elementui的el-select+el-tree+el-input实现可搜索的下拉树组件

部分实现代码如下 <template> <div><el-selectv-model"item.TableName"placeholder"请选择":disabled"!item.disabled"visible-change"handleVisible"ref"TableName"><el-input placeholder"请输…

StatusBar,状态栏设置中文

在Qt的ui中&#xff0c; 菜单栏–View–Property Editor–statusBarVisible–勾选– 在C代码中&#xff0c; sloem1.h private://任意写一个函数void onStatusBarShow();sloem1.cpp void sloem1::onStatusBarShow() {QString strLabel;//显示文字来源this->setTextResour…

Linux:升级OpenSSL和OpenSSH

原因是现有版本存在安全漏洞&#xff0c;需要升级到新版本 原有版本和升级后的版本 OpenSSL 1.0.2k-fips 26 Jan 2017 -> OpenSSL 1.1.1w 11 Sep 2023OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 -> OpenSSH_9.5p1, OpenSSL 1.1.1w 11 Sep 2023目录 查看现有版…

Web3与智能合约:科技革新下的新金融时代

在当今数字化时代&#xff0c;Web3和智能合约正在共同塑造着金融领域的未来。Web3作为下一代互联网的重要组成部分&#xff0c;以其去中心化、安全性和透明性为核心特点&#xff0c;正推动着金融行业向着数字化和去中心化的方向发展。而智能合约作为Web3技术的关键应用之一&…

初探 JUC 并发编程:Java 并发包中并发 List 源码剖析

最近在阅读 《Java 并发编程之美》这本书&#xff0c;感觉学到了很多东西&#xff1b;所以我决定将从事书中学到的思想和一些经典的案例整理成博客的形式与大家分享和交流&#xff0c;如果对大家有帮助别忘了留下点赞和关注捏。 第五部分&#xff1a;Java 并发包中并发 List 源…