LLM面试题八

推荐算法工程师面试题

  1. 二分类的分类损失函数?

    二分类的分类损失函数一般采用交叉熵(Cross Entropy)损失函数,即CE损失函数。二分类问题的CE损失函数可以写成:在这里插入图片描述其中,y是真实标签,p是预测标签,取值为0或1。

  1. 多分类的分类损失函数(Softmax)?

    多分类的分类损失函数采用Softmax交叉熵(Softmax Cross Entropy)损失函数。Softmax函数可以将输出值归一化为概率分布,用于多分类问题的输出层。Softmax交叉熵损失函数可以写成:-∑logn,),其中,n是类别数,yi是第i类的真实标签,pi是第i类的预测概率。

  1. 关于梯度下降的sgdm,adagrad,介绍一下。
  • SGD(Stochastic Gradient Descent)是最基础的梯度下降算法,每次迭代随机选取一个样本计算梯度并更新模型参数
  • SGDM(Stochastic Gradient Descent withMomentum)在SGD的基础上增加了动量项,可以加速收敛
  • Adagrad(AdaptiveGradient)是一种自适应学习率的梯度下降算法,它根据每个参数的梯度历史信息调整学习率,可以更好地适应不同参数的变化范围。
  1. 为什么不用MSE分类用交叉熵?

    MSE(Mean Squared Error)损失函数对离群点敏感,而交叉嫡(CrossEntropy)损失函数在分类问题中表现更好,因为它能更好地刻画分类任务中标签概率分布与模型输出概率分布之间的差异。

  1. yolov5相比于之前增加的特性有哪些?

    YOLOv5相比于之前版本增加了一些特性,包括:使用CSP(Cross StagePartial)架构加速模型训练和推理;采用Swish激活函数代替ReLU;引入多尺度训l练和测试,以提高目标检测的精度和召回率;引入AutoML技术,自动调整超参数以优化模型性能。

  1. 可以介绍一下attention机制吗?

    Attention机制是一种用于序列建模的技术,它可以自适应地对序列中的不同部分赋予不同的权重,以实现更好的特征表示。在Attention机制中,通过计算查询向量与一组键值对之间的相似度,来确定每个键值对的权重,最终通过加权平均的方式得到Attention向量.

  1. 关于attention机制,三个矩阵KQ,KV,K.的作用是什么?

    在Attention机制中,KQV是一组与序列中每个元素对应的三个矩阵,其中K和V分别代表键和值,用于计算对应元素的权重,Q代表查询向量,用于确定权重分配的方式。三个矩阵K、Q、V在Attention机制中的具体作用如下:

  • K(Key)矩阵:K矩阵用于计算每个元素的权重,是一个与输入序列相同大小的矩阵。通过计算查询向量Q与每个元素的相似度,确定每个元素在加权平均中所占的5比例。
  • Q(Query)向量:Q向量是用来确定权重分配方式的向量,与输入序列中的每个元素都有一个对应的相似度,可以看作是一个加权的向量。
  • V(Value)矩阵:V矩阵是与输入序列相同大小的矩阵,用于给每个元素赋予一个对应的特征向量。在Attention机制中,加权平均后的向量就是V矩阵的加权平均向量。

    通过K、Q、V三个矩阵的计算,Attention机制可以自适应地为输入序列中的每个元素分配一个权重,以实现更好的特征表示。

  1. 介绍一下文本检测EAST。

    EAST(Efficient and Accurate Scene Text)是一种用于文本检测的神经网络模型。EAST通过以文本行为单位直接预测文本的位置、方向和尺度,避免了传统方法中需要多次检测和合并的过程,从而提高了文本检测的速度和精度。EAST采用了一种新的训练方式,即以真实文本行作为训练样本,以减少模型对背景噪声的干扰,并在测试阶段通过非极大值抑制(NMS)算法进行文本框的合并。

  1. 编程题(讲思路):给定两个字符串s,在$字符串中找到包含t字符串的最小字串。

    给定两个字符串s、t,可以采用滑动窗口的方式在s中找到包含t的最小子串。具体做法如下:

  • 定义两个指针left和right,分别指向滑动窗口的左右边界。
  • 先移动ight指针,扩展滑动窗口,直到包含了t中的所有字符。
  • 移动left指针,缩小滑动窗口,直到无法再包含t中的所有字符。
  • 记录当前滑动窗口的长度,如果小于之前记录的长度,则更新最小长度和最小子串。
  • 重复(2)到(4)步骤,直到ight指针到达s的末尾为止。

算法工程师暑期实习面试题

  1. 如何理解交叉熵的物理意义

    交叉熵是一种用于比较两个概率分布之间的差异的指标。在机器学习中,它通常用于比较真实标签分布与模型预测分布之间的差异。

  1. 过拟合如何去解决?

    L1正则为什么能够使得参数稀疏,从求导的角度阐述。过拟合的解决方法有很多:数据的角度:获取和使用更多的数据(数据集增强)模型角度:降低模型复杂度、L1L2 Dropout正则化、Early stopping(提前终止)

    模型融合的角度:使用bagging等模型融合方法。L1正则化在损失函数中加入参数的绝对值之和,可以使得一些参数变得非常小或者为零,从而使得模型更加稀疏,减少过拟合的风险。从求导的角度来看:L1正则化添加了个与模型参数绝对值成正比的项到损失函数中,即λ|w|,λ是正则化系数,w是模型参数。进行求导,可以得到:在这里插入图片描述其中sign()是符号函数。这个导数是常数,不像L2正则化的导数那样与参数的大小成正比。

    当使用梯度下降进行优化时,L1正则化会持续地从权重中减去一个恒定的值(取决于其符号),导致许多权重减少到零。而L2正则化会持续地从权重中减去一个与权重大小成正比的值,这不太可能导致权重完全达到零。因此,L1正则化倾向于产生稀疏的权重向量,其中大多数权重为零,而L2正则化则更可能使所有权重都接近于零但不完全为零。

  1. 类别不平衡是如何去处理的?如果进行采样,策略是什么?

    类别不平衡可以通过对数据进行采样来处理。一种常用的采样策略是欠采样,即随机从多数类中选择一部分样本使得样本平衡。另一种常用的采样策略是过采样,即从少数类中复制一些样本使得样本平衡。还有一种策略是生成新的少数类样本,比如SMOTE算法,其中通过对少数类样本进行随机插值来生成新的样本。

  1. 介绍一下attention,做过哪些尝试和改进。

    Attention是一种机器学习中的技术,主要用于提取输入序列中的关键信息。在自然语言处理和图像处理中,Attention机制已经成为了重要的技术。对于Attention的一些实现方法和改进,一种常见的Attention实现方法是Soft Attention,它可以用于提取序列数据中的重要信息。另外,还有些改进方法,比如Muti-Head Attention和Self-Attention等,可以进一步提高Attention的性能。

  1. 对于一个时间顺序的推荐数据,如何划分训练集和验证集,能不能随机?

    对于时间顺序的推荐数据,通常可以使用时间轴来划分训练集和验证集。具体地,可以选取一段时间作为训练集,另一段时间作为验证集。如果数据量足够大,也可以将数据随机划分为训练集和验证集。但是,需要注意的是,在时间序列数据中,训练集和验证集应该按照时间顺序进行划分,以保证模型的泛化能力。

  1. 欠拟合如何去解决,训练过程不收敛如何去解决?

    欠拟合的解决方法有很多,其中一个是增加模型的复杂度。可以增加模型的参数数量、增加网络层数、使用更复杂的模型结构等来提高模型的拟合能力。另外,还可以尝试调整学习率、修改损失函数、增加训练数据等方法。如果训练过程不收敛,可能是学习率过大或者网络结构不合理导致的。可以尝试减小学习率、使用不同的优化器、增加网络层数等方法来解决这个问题。

  1. 正则化和最大似然的关系。

    正则化和最大似然有一定的关系。最大似然是一种用于估计模型参数的方法,其目标是找到使得观测数据出现的概率最大的模型参数。正则化是一种对模型参数进行限制的方法,可以使得模型参数更加稳定和泛化能力更强。在最大似然估计中,通过添加正则化项可以达到类似的目的,即防止模型过拟合。常见的正则化方法包括L1正则化和L2正则化。

  1. Leetcode:数组中第K大的元素。

    难度:【中等】三种思路:一种是直接使用sorted函数进行排序,一种是使用小顶堆,一种是使用快排(双指针+分治)。

  • 方法一:直接使用sorted函数进行排序代码如下:
class Solution:def findKthLargest(self,nums:List[int],k:int)->int:return sorted(nums,reverse =True)[k-1]
  • 方法二:使用堆XX维护一个size为k的小顶堆,把每个数丢进去,如果堆的size>k,就把堆顶pop掉(因为它是最小的),这样可以保证堆顶元素一定是第k大的数。代码如下:
class Solution:def findKthLargest(self,nums:List[int],k:int)->int:heap = []for num in nums:heappush(heap,num)if len(heap)>k:heappop(heap)return heap[0]

    时间复杂度:O(nlogk)空间复杂度:O(k)

  • 方法三:双指针+分治partition部分定义两个指针left和right,还要指定一个中心pivot(这里直接取最左边的元素为中心,即nums[i])不断将两个指针向中间移动,使得大于pivot的元素都在pivot的右边,小于pivot的元素都在pivot的左边,注意最后满足时,left是和right相等的,因此需要将pivot赋给此时的let或right。.然后再将中心点的索引和k-1进行比较,通过不断更新let和right找到最终的第k个位置。代码如下:
class Solution:def findKthLargest(self,nums:List[int],k:int)->int:left,right,target =0,len(nums)-1,k-1while True:pos=self.partition(nums,left,right)if pos ==target:return nums[pos]elif pos>target:right=pos-1else:left = pos + 1def partition(self,nums,left,right):pivot=nums[left]while left right:while nums[right]<=pivot and left<right:right-=1nums[left]=nums[right]while nums[left]>pivot and left<right:left += 1nums[right]nums[left]nums[left] = pivotreturn left

视觉算法工程师面试题

  1. C++编译的过程,从源码到二进制:

    C++源码经过以下几个步骤进行编译,从源码转换为可执行的二进制文件:

  • 预处理(Preprocessing):预处理器根据源码中的预处理指令,如# include、define等,对源码进行文本替换、宏展开等处理。
  • 编译(Compilation):编译器将预处理后的源码转换为汇编语言代码,也称为汇编源码。
  • 汇编(Assembly):汇编器将汇编语言代码转换为机器语言指令,生成目标文件(通常为二进制文件)。
  • 链接(Linking):链接器将目标文件与系统库、用户自定义的库进行链接,生成可执行文件。链接器将目标文件中的符号(如函数、变量等)与其对应的定义进行匹配,解析符号的引用关系,生成最终的可执行文件。
  • 加载(Loading):操作系统将可执行文件加载到内存中,并将程序的控制权转交给程序的入口点,从而开始执行程序。
  1. C++最小的编译单元:

    C++中最小的编译单元是函数。函数在编译时被编译器独立地编译成目标文件,然后通过链接器将目标文件与其他目标文件或库文件链接成最终的可执行文件。

  1. C+静态库和动态库的区别:

    静态库(Static Library)在链接时会被完整地复制到可执行文件中,程序运行时不需要外部的库文件支持。而动态库(Dynamic Library)在链接时并不会被复制到可执行文件中,而是在程序运行时由操作系统动态加载到内存中并共享使用。因此,静态库会增加可执行文件的大小,而动态库可以在多个可执行文件之间共享,减小了可执行文件的大小。

  1. 说一下C+中的share_ptr

    share_ptr是C++11引入的智能指针,用于管理动态分配的对象的所有权。它使用引用计数的方式来自动释放资源,避免了内存泄漏。share_ptr允许多个share_ptr对象共享同一个对象,当最后一个指向对象的share_ptr被销毁时,它会自动释放资源。

  1. C++中new和make_shared创建出来的差异点
  • new和make_shared都用于在堆上分配动态内存并创建对象。其中,new是C++中的关键字,返回的是裸指针,需要手动管理内存释放:而make_shared是C++11引入的函数模板,返回的是一个shared_ptr对象,使用引用计数管理内存,无需手动释放

差异点:

  • make_shared通常比new效率更高,因为它在一次内存分配中同时分配了对象和控制块(用于管理引用计数),减少了内存分配的次数,提高了性能。
  • make_shared可以避免潜在的内存泄漏,因为它将对象和引用计数块一同存储在连续的内存块中,确保了对象和引用计数块的一致性,避免了因为异常导致的资源泄漏。
  • 使用shared_ptr时,建议优先使用make_shared,因为它更加安全和高效,能够减少内存分配次数,提高性能。
  1. C++中左值和右值的概念:
  • 左值(Lvalue)是指具有持久性、可以被命名的表达式或对象,它们具有内存地址。左值可以出现在赋值、取址、函数调用等操作中,并且可以被修改。
  • 右值(Rvalue)是指临时的、没有持久性的表达式或对象,它们不能被命名,通常用于初始化或者临时计算。右值不能出现在赋值的左侧,但可以出现在赋值的右侧,并且可以被移动或者转移所有权。
  • C++11引入了右值引用(Rvalue reference),通过&&表示,用于标识对右值的引用,右值引用可以用于实现移动语义和完美转发(perfect forwarding),提高了性能和灵活性。
  1. C++中的STL(Standard Template Library)里面有以下常用的容器:
  • vector:动态数组,支持随机访问.
  • list:双向链表,支持快速插入和删除。
  • deque:双端队列,支持随机访问。
  • queue:队列,先进先出(FIFO)。
  • stack:栈,后进先出(LIFO)。
  • set:集合,自动排序且元素唯一。
  • map:映射,键值对容器,自动排序且键唯一。
  • unordered_set:无序集合,哈希实现,元素唯一。
  • unordered_map:无序映射,键值对容器,哈希实现。

8、C++中map和unordered_map的区别:

  • 排序:map中的键值对默认按照键的大小进行排序,而unordered_map没有固定的排序,是无序的。
  • 实现:map通常使用红黑树(平衡二叉搜索树)实现,而unordered_map使用哈希表实现。
  • 性能:unordered_map在插入删除和查找操作上通常具有更好的平均性能,因为哈希表具有较快的查找和插入速度,而map则对键进行排序可能会导致性能略低。
  • 内存占用:unordered_map通常占用更多的内存,因为哈希表需要额外的存储空间来存储哈希函数和桶(bucket)的信息,而map使用红黑树存储,不需要额外的存储空间。
  • 查找效率:在大数据量的情况下,unordered_map通常比map更快,因为哈希表具有O(1)的平均查找复杂度,而红黑树具有OogN)的平均查找复杂度。
  • 迭代顺序:mp中的元素按照键的大小进行排序,可以通过迭代器按照顺序访问,而unordered_map中的元素没有固定的顺序。
  • 适用场景:map适用于需要按照键的大小进行排序或者需要有序访问的场景,而unordered_map适用于不需要排序或者对访问顺序无要求的场景,且在性能要求较高的情况下可以考虑使用unordered_map

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/77069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

30天学Java第7天——IO流

概述 基本概念 输入流&#xff1a;从硬盘到内存。&#xff08;输入又叫做 读 read&#xff09;输出流&#xff1a;从内存到硬盘。&#xff08;输出又叫做 写 write&#xff09;字节流&#xff1a;一次读取一个字节。适合非文本数据&#xff0c;它是万能的&#xff0c;啥都能读…

面试可能会遇到的问题回答(嵌入式软件开发部分)

写在前面&#xff1a; 博主也是刚入社会的小牛马&#xff0c;如果下面有写的不好或者写错的地方欢迎大家指出~ 一、四大件基础知识 1、计算机组成原理 &#xff08;1&#xff09;简单介绍一下中断是什么。 ①回答&#xff1a; ②难度系数&#xff1a;★★ ③难点分析&…

层归一化详解及在 Stable Diffusion 中的应用分析

在深度学习中&#xff0c;归一化&#xff08;Normalization&#xff09;技术被广泛用于提升模型训练的稳定性和收敛速度。本文将详细介绍几种常见的归一化方式&#xff0c;并重点分析它们在 Stable Diffusion 模型中的实际使用场景。 一、常见的归一化技术 名称归一化维度应用…

深入理解Socket编程:构建简单的计算器服务器

一、Socket通信基础 1. Socket通信基本流程 服务器端流程&#xff1a; 创建Socket (socket()) 绑定地址和端口 (bind()) 监听连接 (listen()) 接受连接 (accept()) 数据通信 (read()/write()) 关闭连接 (close()) 客户端流程&#xff1a; 创建Socket (socket()) 连接…

Redis-x64-3.2.100.msi : Windows 安装包(MSI 格式)安装步骤

Redis-x64-3.2.100.msi 是 Redis 的 Windows 安装包&#xff08;MSI 格式&#xff09;&#xff0c;适用于 64 位系统。 在由于一些环境需要低版本的Redis的安装包。 Redis-x64-3.2.100.msi 安装包下载&#xff1a;https://pan.quark.cn/s/cc4d38262a15 Redis 是一个开源的 内…

4.7正则表达式

1.字符匹配 一般字符匹配自身. 匹配任意字符(换行符\n除外),一个点占一位\转义字符&#xff0c;使其后一个字符改变原来的意思(\.就是.)[......]字符集,对应的位置可以是字符集中的任意字符.字符集中的字符可以逐个列出,也可以给出范围如[abc]或[a-c] [^abc] 表示取反&#xf…

Fortran 中读取 MATLAB 生成的数据文件

在 Fortran 中读取 MATLAB 生成的数据文件&#xff0c;可以通过以下几种方法实现&#xff0c;包括使用开源工具和手动解析&#xff1a; 1. 使用开源工具&#xff1a;MATFOR MATFOR 是一个商业/开源混合工具&#xff08;部分功能免费&#xff09;&#xff0c;提供 Fortran 与 M…

压测工具开发实战篇(四)——client子窗口功能

你好&#xff0c;我是安然无虞。 文章目录 树控件添加文件补充学习: 函数定义中循环体里的局部变量补充学习: 动态添加对象属性 刷新文件上下文菜单 (右键菜单)实现右键菜单功能 编辑节点文本 在学习本篇文章之前, 建议先看一下上篇介绍MDI子窗口的文章: 压测工具开发实战篇(三…

PyTorch使用(4)-张量拼接操作

文章目录 张量拼接操作1. torch.cat 函数的使用1.1. torch.cat 定义1.2. 语法1.3. 关键规则 1.4. 示例代码1.4.1. 沿行拼接&#xff08;dim0&#xff09;1.4.2. 沿列拼接&#xff08;dim1&#xff09;1.4.3. 高维拼接&#xff08;dim2&#xff09; 1.5. 错误场景分析1.5.1. 维度…

linux命令之yes(Linux Command Yes)

linux命令之yes 简介与功能 yes 命令在 Linux 系统中用于重复输出一行字符串&#xff0c;直到被杀死&#xff08;kill&#xff09;。该命令最常见的用途是自动化控制脚本中的交互式命令&#xff0c;以便无需用户介入即可进行连续的确认操作。 用法示例 基本用法非常简单&am…

《算法笔记》10.3小节——图算法专题->图的遍历 问题 B: 连通图

题目描述 给定一个无向图和其中的所有边&#xff0c;判断这个图是否所有顶点都是连通的。 输入 每组数据的第一行是两个整数 n 和 m&#xff08;0<n<1000&#xff09;。n 表示图的顶点数目&#xff0c;m 表示图中边的数目。如果 n 为 0 表示输入结束。随后有 m 行数据…

使用Prometheus监控systemd服务并可视化

实训背景 你是一家企业的运维工程师&#xff0c;需将服务器的systemd服务监控集成到Prometheus&#xff0c;并通过Grafana展示实时数据。需求如下&#xff1a; 数据采集&#xff1a;监控所有systemd服务的状态&#xff08;运行/停止&#xff09;、资源占用&#xff08;CPU、内…

OpenCV--图像边缘检测

在计算机视觉和图像处理领域&#xff0c;边缘检测是极为关键的技术。边缘作为图像中像素值发生急剧变化的区域&#xff0c;承载了图像的重要结构信息&#xff0c;在物体识别、图像分割、目标跟踪等众多应用场景中发挥着核心作用。OpenCV 作为强大的计算机视觉库&#xff0c;提供…

Rollup详解

Rollup 是一个 JavaScript 模块打包工具&#xff0c;专注于 ES 模块的打包&#xff0c;常用于打包 JavaScript 库。下面从它的工作原理、特点、使用场景、配置和与其他打包工具对比等方面进行详细讲解。 一、 工作原理 Rollup 的核心工作是分析代码中的 import 和 export 语句…

Chapter 7: Compiling C++ Sources with CMake_《Modern CMake for C++》_Notes

Chapter 7: Compiling C Sources with CMake 1. Understanding the Compilation Process Key Points: Four-stage process: Preprocessing → Compilation → Assembly → LinkingCMake abstracts low-level commands but allows granular controlToolchain configuration (c…

5分钟上手GitHub Copilot:AI编程助手实战指南

引言 近年来&#xff0c;AI编程工具逐渐成为开发者提升效率的利器。GitHub Copilot作为由GitHub和OpenAI联合推出的智能代码补全工具&#xff0c;能够根据上下文自动生成代码片段。本文将手把手教你如何快速安装、配置Copilot&#xff0c;并通过实际案例展示其强大功能。 一、…

谢志辉和他的《韵之队诗集》:探寻生活与梦想交织的诗意世界

大家好&#xff0c;我是谢志辉&#xff0c;一个扎根在文字世界&#xff0c;默默耕耘的写作者。写作于我而言&#xff0c;早已不是简单的爱好&#xff0c;而是生命中不可或缺的一部分。无数个寂静的夜晚&#xff0c;当世界陷入沉睡&#xff0c;我独自坐在书桌前&#xff0c;伴着…

Logo语言的死锁

Logo语言的死锁现象研究 引言 在计算机科学中&#xff0c;死锁是一个重要的研究课题&#xff0c;尤其是在并发编程中。它指的是两个或多个进程因争夺资源而造成的一种永久等待状态。在编程语言的设计与实现中&#xff0c;如何避免死锁成为了优化系统性能和提高程序可靠性的关…

深入理解矩阵乘积的导数:以线性回归损失函数为例

深入理解矩阵乘积的导数&#xff1a;以线性回归损失函数为例 在机器学习和数据分析领域&#xff0c;矩阵微积分扮演着至关重要的角色。特别是当我们涉及到优化问题&#xff0c;如最小化损失函数时&#xff0c;对矩阵表达式求导变得必不可少。本文将通过一个具体的例子——线性…

real_time_camera_audio_display_with_animation

视频录制 import cv2 import pyaudio import wave import threading import os import tkinter as tk from PIL import Image, ImageTk # 视频录制设置 VIDEO_WIDTH = 640 VIDEO_HEIGHT = 480 FPS = 20.0 VIDEO_FILENAME = _video.mp4 AUDIO_FILENAME = _audio.wav OUTPUT_…