面试字节被挂了

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

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的卷积问题,把上面的几点回答出来,这个问题基本就可以了,不知道有没有小伙伴被问道过这个问题呢,欢迎大家在评论区交流学习一下~~

相关推荐
Lee川2 小时前
JavaScript 面向对象编程全景指南:从原始字面量到原型链的终极进化
javascript·面试
千寻girling6 小时前
一份不可多得的 《 Django 》 零基础入门教程
后端·python·面试
SuperEugene7 小时前
Vue生态精选篇:Element Plus 的“企业后台常用组件”用法扫盲
前端·vue.js·面试
Neptune17 小时前
JavaScript回归基本功之---类型判断--typeof篇
前端·javascript·面试
离开地球表面_9910 小时前
金三银四程序员跳槽指南:从简历到面试再到 Offer 的全流程准备
前端·后端·面试
UrbanJazzerati10 小时前
Scrapling入门指南:零基础也能学会的网页抓取神器
后端·面试
比尔盖茨的大脑10 小时前
事件循环底层原理:从 V8 引擎到浏览器实现
前端·javascript·面试
Qinana10 小时前
从 URL 输入到页面展示:一场跨越进程与协议的“装修”大戏
前端·面试·程序员
我叫黑大帅11 小时前
Go中的interface的两大用法
后端·面试·go
龙猫不热11 小时前
从 0 手写 Promise:拆解 Promise 链式调用的实现原理
前端·javascript·面试