面试字节被挂了

分享一个面试字节的经历。

1、面试过程

一面:上来就直接"做个题吧",做完之后,对着简历上一个项目聊,一直聊到最后,还算比较正常。

二面:做自我介绍,花几分钟聊了一个项目,剩下20分钟全聊基础,CNN、pooling、1x1卷积,最后又做了一个题。

三面:做了个自我介绍,聊 GPU 与显存的内容,然后跟我讲业务,反问了我一句:"你们这个从0到1之后能从1到100吗?有可持续研究的价值吗?",问的是一脸懵。

最后在反问环节,我了解到他们部门竟然以NLP为主,但是面试问的全是 CV 方向的。

最后面试挂了,真的很奇葩。

图片

这让我回想起几年前我面试某大厂的时候,被问到了很多深度学习相关的知识,那时的我懂的不多,可以说是被面试官360度无死角蹂躏。

那次面试,印象最深的就是被问到了和上面的小伙伴遇到的一样的问题:1X1卷积的作用。

今天就介绍一下:在卷积神经网络中,1x1的卷积都有什么作用?

2、在卷积神经网络中,1x1的卷积有什么作用呢?

大概有以下几个作用。

第一是可以实现输出feature map(特征图)的升维和降维

第二个是可以减少模型中的参数量,从而减少计算量,提升模型的推理性能

除此之外,就是使用1x1的卷积可以增加网络的深度,从而提升模型的非线性表达能力。

3、1x1的卷积是如何实现升维和降维的

这里说的1x1的卷积实现升维和降维的功能,指的是 feature map 通道维度的改变,也即特征维度的改变。

这是因为1x1的卷积,卷积核长宽尺寸都是 1,在计算的过程中,不存在长、宽方向像素之间的融合计算(乘累加计算),而仅仅存在通道之间的融合计算。

因此,在这种情况下,1x1的卷积所能改变的仅仅是通道数。

而从卷积算法上可以看出,卷积核的个数就是卷积输出的通道数。因此如果想让输出特征图的通道数增大,就要使用更多数量的卷积核来做卷积,从而实现特征维度的升或者降。

4、1x1的卷积是如何减少模型参数的

减少参数量可以这么理解:在输出相同特征图的前提下,将一个普通的卷积,替换成一个1x1的卷积加上另一个卷积,先进行降维,然后计算,如此一来整体的计算量要比普通卷积少。

图片

举个例子,如上图所示。

假设一个卷积的输入通道是128,输出通道是32,如果不使用1x1的卷积,那么整个卷积的乘累加计算量是:

28x28x128x3x3x32 = 28901376

而如果使用1x1的卷积先降维处理,然后在降维之后的特征图上进行一个卷积计算,那么整体的乘累加计算量为:

128x28x28x16 + 28x28x16x3x3x32 = 5218304

两者对比,后者比前者减少了80%的计算量。

5、如何理解1x1卷积可以提升模型的非线性表达能力

神经网络模拟的就是一个非线性系统,之所以在卷积层后面增加非线性层,比如Relu层,其实就是这个道理。

而1x1的卷积可以使得在完成相同卷积功能的前提下,网络的层数变得更深(如上面的例子,一个普通卷积变成了2层卷积)。

网络层数的加深,就会导致更多非线性层数的增加,从而使得整个神经网络模型的非线性表达能力更强。

6、1x1的卷积还有其他哪些优势吗

1x1的卷积还可以增加通道之间的融合程度。

由于1x1卷积不存在长宽方向的像素融合,所有的计算都是通道之间的交叉计算,因此,可以更好的完成通道间的融合,而通道代表的是特征,因此可以更好的实现特征融合。

这一点,和全连接类似(因为1x1的卷积就可以表示为全连接)。

总之,如果在面试过程中被问到关于1x1的卷积问题,把上面的几点回答出来,这个问题基本就可以了,不知道有没有小伙伴被问道过这个问题呢,欢迎大家在评论区交流学习一下~~

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

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

相关文章

ES入门十二:相关性评分

对于一个搜索引擎来说,对检索出来的数据进行排序是非常重要的功能。全文本数据的检索通常无法用是否相等来的出结果,而是用相关性来决定最后的返回结果 相关性是值搜索内容和结果的相关性,是用来描述文档和查询语句的匹配程度的。通过计算相…

C++ 学习笔记

文章目录 【 字符串相关 】C 输入输出流strcpy_s() 字符串复制输出乱码 【 STL 】各个 STL 支持的常见方法 ? : 运算符switch case 运算符 switch(expression) {case constant-expression :statement(s);break; // 可选的case constant-expression :statement(s);break; //…

【QT学习】Graphics View框架(高阶篇)- 使用Graphics View框架创建开机动画

【QT学习】Graphics View框架(高阶篇)- 使用Graphics View框架创建开机动画_qgraphicsview 一步-CSDN博客 前言 在上一篇《Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item》中,我们介绍了创建自定…

目标检测——RCNN系列学习(一)

前置知识 包括:非极大值抑制(NMS)、selective search等 RCNN [1311.2524] Rich feature hierarchies for accurate object detection and semantic segmentation (arxiv.org)https://arxiv.org/abs/1311.2524 1.网络训练 2.推理流程 3.总…

第15届蓝桥STEMA测评真题剖析-2024年3月10日Scratch编程初中级组

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第180讲。 第15届蓝桥第5次STEMA测评,这是2024年3月10日举办的STEMA,比赛仍然采取线上形式。这…

创建一个C# WinForm应用程序的步骤

创建项目界面设计设置属性编写代码保存项目运行程序 1. 新建项目 默认情况下,项目名称和解决方案名称是保持一致的,用户也可以修改成不一样的。一个解决方案下面是可以包含多个项目的,比如和应用程序相关的数据结构项目、一些资源等。 点击…

PhoneStatusBarView有关拖动的堆栈信息

开机: 拖动时的堆栈信息:

MoonBit 最新动态:MoonBit 引入实验性的测试覆盖率统计工具

MoonBit更新 支持 array.iter intrinsic 并且已经对标准库中的函数进行标注&#xff0c;从而可以在特定情况下将循环进行内联&#xff0c;以提升运行效率 /// intrinsic %array.iter pub fn iter[T](self : Array[T], f : (T) -> Unit) -> Unit {for i 0; i < self…

如何实现小程序滑动删除组件+全选批量删除组件

如何实现小程序滑动删除组件全选批量删除组件 一、简介 如何实现小程序滑动删除组件全选批量删除组件 采用 uni-app 实现&#xff0c;可以适用微信小程序、其他各种小程序以及 APP、Web等多个平台 具体实现步骤如下&#xff1a; 下载开发者工具 HbuilderX进入 【Dcloud 插…

代码随想录训练营day30

第七章 回溯算法part06 1.LeetCode.重新安排行程 先跳过 1.1题目链接&#xff1a; 文章讲解&#xff1a;代码随想录 1.2思路&#xff1a; 1.3附加代码如下所示&#xff1a; 2.LeetCode. N皇后 2.1题目链接&#xff1a; 文章讲解&#xff1a;代码随想录 视频讲解&#…

flutter 获取验证码倒计时组件封装

send_sms_btn.dart import dart:async;import package:flutter/material.dart; import package:get/get.dart;// 发送验证码 按钮 class SendSmsBtn extends StatefulWidget {final Future<bool> Function()? onTap;const SendSmsBtn({super.key,this.onTap,});overrid…

Mysql底层原理六:InnoDB 数据页结构

1.行格式 1.1 Compact行格式 1.1.1 示意图 1.1.2 准备一下 1&#xff09;建表 mysql> CREATE TABLE record_format_demo (-> c1 VARCHAR(10),-> c2 VARCHAR(10) NOT NULL,-> c3 CHAR(10),-> c4 VARCHAR(10)-> ) CHARSETascii ROW_FORMATCOM…