AI/机器学习(计算机视觉/NLP)方向面试复习5

news2024/9/21 20:48:49

目录

1. GNN graph neural network

2. 0-1背包问题

3. 0-1背包问题(一维dp)

4. 螺旋矩阵 按顺时针顺序返回所有数

5. fasttext与glove


1. GNN graph neural network

(1)图的基本定义

GNN的Roadmap:其中用的最常见的还是GAT和GCN这两个model。

一般用到的tasks:

(1)半监督Node 分类

(2)回归

(3)图分类

(4)图表示学习

(5)链接预测

例子:NN4G的结构。先做embedding,再conv两次,最后readout也就是得到一个值,这个值就用来做分类。

李宏毅的课不知道在说什么。找了下其他的课件。图神经网络是一种图嵌入的方法,图嵌入除了图神经网络,还有矩阵分解和随机游走。常见模型是DeepWalk, Node2Vec。但是直接嵌入的方法缺乏泛化能力,无法处理动态图或者泛化到新的图。

2. 0-1背包问题

平时只会考01背包和完全背包,但重点还是写出状态转移方程。

01背包:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

这里要构造二维数组。dp[i][j]表示的是:当物品为i个,最大重量为j时的最大价值。

状态转移方程为: dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]] + value[i]) 分别表示放这个物品和不放这个物品

dp初始化:第一列都为0,因为重量为0放不了东西,第一行从重量能包含第一个物品开始,价值都为物品1的价值。因为物品1只有一个,放进去了就是它的价值。

遍历顺序先行后列,先列后行都可以。

写完代码发现坑还是很多。dp的维度,长为n,包含0到n-1个物品,宽为weight+1,包含0到weight个重量选择。

在每次迭代之前,要判断j的重量是不是小于这个物品重量,小于就肯定放不了。

int main(){
    int M,N;
    //m:物品数量,n:行李空间
    cin>>M>>N;
    vector<int> weights(M), value(M);
    for(int i =0;i<M;i++) cin>>weights[i];
    for(int i =0;i<M;i++) cin>>value[i];
    vector<vector<int>> dp(M,vector<int>(N+1,0));
    // init
    for(int j=weights[0];j<=N;j++){
        dp[0][j] = value[0];
    }
    // iter
    for(int i =1; i<M;i++){
        for(int j = 0;j<=N;j++){
            if (j<weights[i]) dp[i][j] = dp[i-1][j];
            else dp[i][j] = max(dp[i-1][j], dp[i-1][j-weights[i]] + value[i]);
        }
    }
    cout<<dp[M-1][N] << endl;
    
}

3. 0-1背包问题(一维dp)

dp[i][j] = dp[i-1][j] + dp[i-1][j-weight[i]] + value[i]

简化为:

dp[j] = dp[j] + dp[j-weight[i]] + value[i]

初始化:整个数组初始化为0

要注意!一个是j是从大到小遍历的,另一点是j的限制条件,必须大于weights[i] 才可能把物品i放进去

int main(){
    int m,n;
    cin>>m>>n;
    vector<int> weights(m), values(m);
    for(int i=0;i<m;i++){
        cin>>weights[i];
    }
    for(int i=0;i<m;i++){
        cin>>values[i];
    }
    vector<int> dp(n+1,0);
    for(int i = 0;i<m;i++){
        for(int j = n;j>=weights[i];j--){
            dp[j] = max(dp[j], dp[j-weights[i]]+values[i]);
        }
    }
    cout<<dp[n]<<endl;
    return 0;
    
}

4. 螺旋矩阵 按顺时针顺序返回所有数

    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        int n = matrix.size(), m = matrix[0].size();
        int top = 0,bot = n-1,left = 0, right = m-1;
        vector<int> res;
        while(true){
            for(int i = left;i<=right;i++ ) res.push_back(matrix[top][i]);
            top++;
            if(top > bot) break;
            for(int i = top;i<=bot;i++) res.push_back(matrix[i][right]);
            right--;
            if(right < left) break;
            for(int i = right;i>=left;i--) res.push_back(matrix[bot][i]);
            bot--;
            if(bot < top) break;
            for(int i = bot;i>=top ;i--) res.push_back(matrix[i][left]);
            left++;
            if(left > right) break;
        }
        return res;

    }

这题挺难搞,最好直接背这个思路,不然边界条件太麻烦了。

思路就是,设置上下左右边界,遍历一遍后更新边界,并判断边界是否有交错,有交错就说明到结尾了。

5. fasttext与glove

这两个是除了word embedding以外其他的词转向量的算法。

(1)fasttext

fastText是一个快速文本分类算法。非神经网络,用的应该是机器学习算法。和CBOW很像。但fastText预测标签,而CBOW预测的是中间词。用上下文来预测连接词。输入的是x的n-gram形式,输出的是类别。

它使用了分层softmax,也就是根据类别频率的霍夫曼树来代替softmax。原本是对所有类别做归一化,复杂度就是N,构造树后复杂度就是Log(N)

霍夫曼树就是把所有节点按权重排列

n-gram的具体实现,是文本内容按照子节顺序进行大小为N的窗口滑动操作,最终形成窗口为N的字节片段序列。

从上面来看,使用n-gram有如下优点:
1、为罕见的单词生成更好的单词向量:根据上面的字符级别的n-gram来说,即是这个单词出现的次数很少,但是组成单词的字符和其他单词有共享的部分,因此这一点可以优化生成的单词向量
2、在词汇单词中,即使单词没有出现在训练语料库中,仍然可以从字符级n-gram中构造单词的词向量
3、n-gram可以让模型学习到局部单词顺序的部分信息, 如果不考虑n-gram则便是取每个单词,这样无法考虑到词序所包含的信息,即也可理解为上下文信息,因此通过n-gram的方式关联相邻的几个词,这样会让模型在训练的时候保持词序信息

但正如上面提到过,随着语料库的增加,内存需求也会不断增加,严重影响模型构建速度,针对这个有以下几种解决方案:
1、过滤掉出现次数少的单词
2、使用hash存储
3、由采用字粒度变化为采用词粒度

(2)glove 带有全局向量的词嵌入

是一种无监督学习算法,用聚合全局词-词共现统计数据

所以fasttext用的是ngram,glove用的是共现矩阵。

GloVe的优点在于,与Word2vec不同,GloVe不仅依赖于局部统计信息(单词的本地上下文信息),而是结合全局统计信息(单词共现)来获得单词向量。

GloVe可以从共现矩阵(co-occurrence probabilities matrix)中派生单词之间了解语义关系。

共现矩阵是一个方阵,第i行j列表示单词i与单词j之间的关系。判断方式是看这两个词是否出现在上下文中,也就是同一个句子或者同一个窗口。

6. 只出现一次的数组

给一个数组,判断哪个数只出现一次,保证其余的数都出现两次。

做法就是异或,相同的数异或为0,都消掉了,不同的数异或结果就等于他本身。注意异或符号是^。(python也是)

    int singleNumber(vector<int>& nums) {
        int res = 0;
        for(int num:nums){
            res =res ^ num;
        }
        return res;
    }

7. 分割等和子集

我这辈子都想不到这题会用01背包做。反正题解解释的思路大概也能懂,但是换个题我肯定就不会了。。

从一个数组里找到一些数加起来能刚好等于总和/2

做法就是01背包,让weights=values=数。重点在于,如果刚好有一组数加起来能等于target,那么dp[target]=target. 否则,dp[target]肯定小于dptarget。

状态转移方程和01背包一模一样,没啥好说的

    bool canPartition(vector<int>& nums) {
        int sum = 0;
        for(int n:nums){
            sum += n;
        }
        if (sum%2 != 0) return false;
        int total = int(sum/2);
        cout<<total<<endl;
        vector<int>dp(total+1,0); 
        for(int i =0;i<nums.size();i++){
            for(int j = total;j>=nums[i];j--){
                dp[j] = max(dp[j],dp[j-nums[i]]+nums[i]);
            }
        }
        if (dp[total] == total) return true;
        return false; 
    }

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

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

相关文章

SD卡电路设计基础

一、定义 SD卡按尺寸分类可分为三类:标准 SD 卡、Mini SD 卡和 Micro SD 卡。其中Mini SD 卡比较少见&#xff0c;标准 SD 卡因为体积较大主要用在数码相机等对体积要求不严格的地方,我们最常用的是 Micro SD 卡&#xff0c;原名Trans-flash Card (TF 卡)。 Micro SD 作用:一…

★ C++基础篇 ★ 栈和队列

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C基础篇第八章----栈和队列 ~ 目录 一 容器适配器 二 deque的简单介绍 2.1 deque的原理介绍 2.2 deque vector list 的优缺点 2.2.1 vector 2.2.2 list 2.2.3 deque 2.3 为什么选择deq…

ETL数据集成丨PostgreSQL数据迁移至Hive数据库

PostgreSQL数据迁移至Hive数据库 在现代企业数据架构中&#xff0c;将数据从关系型数据库如PostgreSQL迁移到分布式数据仓库系统如Hive&#xff0c;是一项至关重要的任务&#xff0c;旨在实现数据的高效存储、处理与分析。这一过程不仅涉及技术层面的操作转换&#xff0c;还深…

unity项目打包为webgl后应用于vue项目中(iframe模式)的数据交互

参考文章&#xff1a; 1.Unity打包WebGL: 导入Vue 2.unity文档-WebGL&#xff1a;与浏览器脚本交互 3.unity与vue交互(无第三方插件&#xff09; 目录 一、前期工作1.新建.jslib文件2.新建.cs脚本3. 新建一个Text对象和button按钮对象4.添加脚本空对象UIEvent5.导出unity为w…

SpringBoot-配置加载顺序

目录 前言 样例 内部配置加载顺序 ​ 样例 小结 前言 我之前写的配置文件&#xff0c;都是放在resources文件夹&#xff0c;根据当前目录下&#xff0c;优先级的高低&#xff0c;判断谁先被加载。但实际开发中&#xff0c;我们写的配置文件并不是&#xff0c;都放…

利用CICD管道和MLOps自动化微调、部署亚马逊云科技上的AI大语言模型

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技利用CodeP…

DeepLearning.AI课程:从代码层面理解预训练大语言模型(Pretraining LLMs)

本文是学习 https://www.deeplearning.ai/short-courses/pretraining-llms/ 这门课的学习笔记。 What you’ll learn in this course In Pretraining LLMs you’ll explore the first step of training large language models using a technique called pretraining. You’ll …

如何从Mac 电脑恢复已删除的文件

您是否曾经不小心从Mac中删除了文件或文件夹&#xff0c;然后后来意识到您确实需要它&#xff1f;或者你有没有清空过你的垃圾桶&#xff0c;片刻后才意识到你不小心也从那里删除了一些重要文件&#xff1f;如果是&#xff0c;那么这篇博文就是为你准备的&#xff01; 今天&am…

书籍分享:【矩阵力量】豆瓣评分高达9.6,看完感叹《矩阵论》又白学了

书籍分享&#xff1a;【矩阵力量】豆瓣评分高达9.6&#xff0c;看完感叹《矩阵论》又白学了 《矩阵力量》简要介绍书籍下载链接 《矩阵力量》简要介绍 《矩阵力量》是姜伟生精心编写的线性代数的深度理解之作&#xff0c;作者将抽象的线性代数概念用通俗易懂的语言和大量生动形…

【过程管理】项目需求管理规程(Word原件)

在软件开发的过程中&#xff0c;开发人员与用户之间往往忽视有效的信息沟通&#xff0c;这常常导致开发出的软件无法满足用户的实际需求&#xff0c;进而引发不必要的返工。返工不仅为开发人员带来技术上的困扰&#xff0c;增加了人力和物力的消耗&#xff0c;还会对软件的整体…

tiktok 搜索翻页

这几天有小伙伴问tk的搜索接口的问题, 一个是搜索热门接口请求返回 {“status_code”: 0},这个使用curl_cffi的requests库改一下指纹请求就行了。 再一个就是翻页问题 细心一些比对一下翻页参数都能做到的(小伙伴以为只改个offset就完事了) 要不然你只能得到这样的结果:…

实现异形(拱形)轮播图

项目需要实现如上图所示的轮播图。 实现思路&#xff1a; 1.项目引入使用普通轮播图。 2.根据轮播图个数&#xff0c;动态给可视范围的第一个轮播图和最后一个轮播图添加样式。 代码实现&#xff1a; 经调研&#xff0c;使用slick轮播图&#xff08;官网地址 https://kenwheel…

经纬恒润再度受邀参加中国一汽红旗供应链创新科技展

中国一汽红旗“技领时代&#xff0c;智创未来”第六届供应链创新科技展在长春一汽总部旗境空间隆重举行&#xff0c;经纬恒润作为中国一汽战略合作伙伴及理事会成员受邀出席&#xff0c;携最新汽车电子研发成果亮相科技展&#xff0c;副总经理范成建博士受邀出席本次开幕式。 本…

电子电气架构 --- 整车电源管理

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

【MySQL进阶】事务、存储引擎、索引、SQL优化、锁

一、事务 1.概念 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向 系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 例子&#xff1a;转账&#xff0c;要求扣钱和进账…

Mysql 离线版下载安装-(详细版)

Mysql 离线版下载安装-(详细版) 文章目录 Mysql 离线版下载安装-(详细版)1.0 下载地址2.0 解压到本地2.0.1 配置环境变量2.0.2 新建mysql配置文件ini2.0.3使用管理员启动 cmd 3.0 初始化密码忘记了4.0 修改初始化密码5.0 使用可视化工具登录Mysql 1.0 下载地址 地址&#xff1…

stm32使用笔记

stm32外设使用 1. adc使用2. uart使用 1. adc使用 参考文章 static void MX_Adc_DMA_Init(void) {/* DMA controller clock enable */__HAL_RCC_DMA1_CLK_ENABLE();/* DMA interrupt init *//* DMA1_Channel1_IRQn interrupt configuration */HAL_NVIC_SetPriority(DMA1_Cha…

人工智能应用中的恐怖谷效应是什么?

人工智能应用中的恐怖谷效应是什么&#xff1f; 引言 随着人工智能、机器人技术和计算机图形学的发展&#xff0c;越来越逼真的人形机器人、虚拟角色和动画形象开始出现。然而&#xff0c;尽管这些技术进步令人惊叹&#xff0c;它们也带来了一个有趣而复杂的心理现象&#xf…

应急响应:Linux 入侵排查思路.

什么是应急响应. 一个组织为了 应对 各种网络安全 意外事件 的发生 所做的准备 以及在 事件发生后 所采取的措施 。说白了就是别人攻击你了&#xff0c;你怎么把这个攻击还原&#xff0c;看看别人是怎么攻击的&#xff0c;然后你如何去处理&#xff0c;这就是应急响应。 目录&…

引领企业全球化发展 极光亮相华为亚太ICT峰会2024·泰国

近日&#xff0c;华为亚太ICT峰会2024泰国正式开幕&#xff0c;极光&#xff08;Aurora Mobile&#xff0c;纳斯达克股票代码&#xff1a;JG&#xff09;凭借其创新的技术实力与前瞻性的产品布局&#xff0c;受邀出席本次活动。会上&#xff0c;极光展示了其全域消息通知解决方…