概率算法工程师考试

快回来
  • 回答数

    5

  • 浏览数

    5346

首页> 工程师报名> 概率算法工程师考试

5个回答默认排序
  • 默认排序
  • 按时间排序

赖皮孩

已采纳

参考:

反卷积也称为转置卷积,如果用矩阵乘法实现卷积操作,将卷积核平铺为矩阵,则转置卷积在正向计算时左乘这个矩阵的转置WT,在反向传播是左乘W,与卷积操作刚好相反,需要注意的是,反卷积不是卷积的逆运算。 [知乎问题+caffe实现]

实现上采样;近似重构输入图像,卷积层可视化。

只要激活函数选择得当,神经元的数量足够,至少有一个隐含层的神经网络可以 逼近闭区间上任意一个连续函数到任意指定的精度。

判别模型,直接输出类别标签,或者输出类后验概率p(y|x) [ ][ ][ ]

BN是在 batch这个维度上进行归一化,GN是计算channel方向每个group的均值方差.

检测结果与 Ground Truth 的交集比上它们的并集,即为检测的准确率 IoU

内存显存占用;模型收敛速度等

Hessian矩阵是n*n, 在高维情况下这个矩阵非常大,计算和存储都是问题。

mini-batch太小会导致收敛变慢,太大容易陷入sharp minima,泛化性不好。

可以把dropout看成是 一种ensemble方法,每次做完dropout相当于从原网络中找到一个更瘦的网络。

pooling操作虽然能增大感受野,但是会丢失一些信息。空洞卷积在卷积核中插入权重为0的值,因此每次卷积中会skip掉一些像素点;

空洞卷积增大了卷积输出每个点的感受野,并且不像pooling会丢失信息,在图像需要全局信息或者需要较长sequence依赖的语音序列问题上有着较广泛的应用。

表达式为:

使用BN的原因是网络训练中每一层不断改变的参数会导致后续每一层输入的分布发生变化,而学习的过程又要使每一层去适应输入的分布,因此不得不降低网络的学习率,并且要小心得初始化(internal covariant shift) 如果仅通过归一化方法使得数据具有零均值和单位方差,则会降低层的表达能力(如使用Sigmoid函数时,只使用线性区域) BN的具体过程(注意第三个公式中分母要加上epsilon)

最好的解释是通过1 * 1卷积核能实现多个channel间的解耦合,解耦cross-channel correlation和spatial correlation。 【但是因为解耦不彻底,因此后续有了mobile net的组卷积方式和shuffle net组卷积方式】

由于 1×1 并不会改变 height 和 width,改变通道的第一个最直观的结果,就是可以将原本的数据量进行增加或者减少。改变的只是 height × width × channels 中的 channels 这一个维度的大小而已。

1*1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep。

备注:一个filter对应卷积后得到一个feature map,不同的filter(不同的weight和bias),卷积以后得到不同的feature map,提取不同的特征,得到对应的specialized neuron。

例子:使用1x1卷积核,实现降维和升维的操作其实就是channel间信息的线性组合变化,3x3,64channels的卷积核后面添加一个1x1,28channels的卷积核,就变成了3x3,28channels的卷积核,原来的64个channels就可以理解为跨通道线性组合变成了28channels,这就是通道间的信息交互

注意:只是在channel维度上做线性组合,W和H上是共享权值的sliding window

并不能说明这个模型无效导致模型不收敛的原因可能有

A. 在实际场景下,应尽量使用ADAM,避免使用SGD B. 同样的初始学习率情况下,ADAM的收敛速度总是快于SGD方法C. 相同超参数数量情况下,比起自适应的学习率调整方式,SGD加手动调节通常会取得更好效果D. 同样的初始学习率情况下,ADAM比SGD容易过拟合

A.保证每一层的感受野不变,网络深度加深,使得网络的精度更高B.使得每一层的感受野增大,学习小特征的能力变大C.有效提取高层语义信息,且对高层语义进行加工,有效提高网络准确度D.利用该结构有效减轻网络的权重

A.计算简单 B.非线性 C.具有饱和区D.几乎处处可微 【relu函数在0处是不可微的。】

的收敛速度比RMSprop慢 B.相比于SGD或RMSprop等优化器,Adam的收敛效果是最好的 C.对于轻量级神经网络,使用Adam比使用RMSprop更合适D.相比于Adam或RMSprop等优化器,SGD的收敛效果是最好的【SGD通常训练时间更长,容易陷入鞍点,但是在好的初始化和学习率调度方案的情况下,结果更可靠。如果在意更快的收敛,并且需要训练较深较复杂的网络时,推荐使用学习率自适应的优化方法。】

A.使用ReLU做为激活函数,可有效地防止梯度爆炸 B.使用Sigmoid做为激活函数,较容易出现梯度消失C.使用Batch Normalization层,可有效的防止梯度爆炸D.使用参数weight decay,在一程度上可防止模型过拟合

对结果存疑。认为二者皆可防止。

L-BFGS(Limited-memory BFGS,内存受限拟牛顿法)方法:所有的数据都会参与训练,算法融入方差归一化和均值归一化。大数据集训练DNN,容易参数量过大 (牛顿法的进化版本,寻找更好的优化方向,减少迭代轮数)从LBFGS算法的流程来看,其整个的核心的就是如何快速计算一个Hesse的近似:重点一是近似,所以有了LBFGS算法中使用前m个近似下降方向进行迭代的计算过程;重点二是快速,这个体现在不用保存Hesse矩阵上,只需要使用一个保存后的一阶导数序列就可以完成,因此不需要大量的存储,从而节省了计算资源;重点三,是在推导中使用秩二校正构造了一个正定矩阵,即便这个矩阵不是最优的下降方向,但至少可以保证函数下降。 FTRL(Follow-the-regularized-Leader)是一种适用于处理超大规模数据的,含大量稀疏特征的在线学习的常见优化算法,方便实用,而且效果很好,常用于更新在线的CTR预估模型;FTRL在处理带非光滑正则项(如L1正则)的凸优化问题上表现非常出色,不仅可以通过L1正则控制模型的稀疏度,而且收敛速度快;

在一定程度上解决了传统RNN梯度消失或梯度爆炸的问题 相比于全连接的优势之一是模型复杂度低,缓解过拟合C.只要参数设置合理,深度学习的效果至少应优于随机算法D.随机梯度下降法可以缓解网络训练过程中陷入鞍点的问题

实际上,现在有很多针对小目标的措施和改良,如下:

最常见的是Upsample来Rezie网络输入图像的大小;

用dilatedastrous等这类特殊的卷积来提高检测器对分辨率的敏感度;(空洞卷积是针对图像语义分割问题中下采样会降低图像分辨率、丢失信息而提出的一种卷积思路。利用添加空洞扩大感受野,让原本3 x3的卷积核,在相同参数量和计算量下拥有5x5(dilated rate =2)或者更大的感受野,从而无需下采样。在保持参数个数不变的情况下增大了卷积核的感受野)

有比较直接的在浅层和深层的Feature Map上直接各自独立做预测的,这个就是我们常说的尺度问题。

用FPN这种把浅层特征和深层特征融合的,或者最后在预测的时候,用浅层特征和深层特征一起预测;

SNIP(Scale Normalization for Image Pyramids)主要思路:

在训练和反向传播更新参数时,只考虑那些在指定的尺度范围内的目标,由此提出了一种特别的多尺度训练方法。

179评论

凉城凉心

所有的问题一般都最后都会归结为数学问题,我觉得这方面功底好了,应该是可以的。 西 嵌教育

20评论

萌过头

成为一名合格的开发工程师不是一件简单的事情,需要掌握从开发到调试到优化等一系列能力,这些能力中的每一项掌握起来都需要足够的努力和经验。而要成为一名合格的机器学习算法工程师(以下简称算法工程师)更是难上加难,因为在掌握工程师的通用技能以外,还需要掌握一张不算小的机器学习算法知识网络。

下面我们就将成为一名合格的算法工程师所需的技能进行拆分,一起来看一下究竟需要掌握哪些技能才能算是一名合格的算法工程师。

1.基础开发能力

所谓算法工程师,首先需要是一名工程师,那么就要掌握所有开发工程师都需要掌握的一些能力。

有些同学对于这一点存在一些误解,认为所谓算法工程师就只需要思考和设计算法,不用在乎这些算法如何实现,而且会有人帮你来实现你想出来的算法方案。这种思想是错误的,在大多数企业的大多数职位中,算法工程师需要负责从算法设计到算法实现再到算法上线这一个全流程的工作。

笔者曾经见过一些企业实行过算法设计与算法实现相分离的组织架构,但是在这种架构下,说不清楚谁该为算法效果负责,算法设计者和算法开发者都有一肚子的苦水,具体原因不在本文的讨论范畴中,但希望大家记住的是,基础的开发技能是所有算法工程师都需要掌握的。

2.概率和统计基础

概率和统计可以说是机器学习领域的基石之一,从某个角度来看,机器学习可以看做是建立在概率思维之上的一种对不确定世界的系统性思考和认知方式。学会用概率的视角看待问题,用概率的语言描述问题,是深入理解和熟练运用机器学习技术的最重要基础之一。

概率论内容很多,但都是以具体的一个个分布为具体表现载体体现出来的,所以学好常用的概率分布及其各种性质对于学好概率非常重要。

对于离散数据,伯努利分布、二项分布、多项分布、Beta分布、狄里克莱分布以及泊松分布都是需要理解掌握的内容;

对于离线数据,高斯分布和指数分布族是比较重要的分布。这些分布贯穿着机器学习的各种模型之中,也存在于互联网和真实世界的各种数据之中,理解了数据的分布,才能知道该对它们做什么样的处理。

此外,假设检验的相关理论也需要掌握。在这个所谓的大数据时代,最能人的大概就是数据了,掌握了假设检验和置信区间等相关理论,才能具备分辨数据结论真伪的能力。例如两组数据是否真的存在差异,上线一个策略之后指标是否真的有提升等等。这种问题在实际工作中非常常见,不掌握相关能力的话相当于就是大数据时代的睁眼瞎。

在统计方面,一些常用的参数估计方法也需要掌握,典型的如最大似然估计、最大后验估计、EM算法等。这些理论和最优化理论一样,都是可以应用于所有模型的理论,是基础中的基础。

3.机器学习理论

虽然现在开箱即用的开源工具包越来越多,但并不意味着算法工程师就可以忽略机器学习基础理论的学习和掌握。这样做主要有两方面的意义:

掌握理论才能对各种工具、技巧灵活应用,而不是只会照搬套用。只有在这个基础上才能够真正具备搭建一套机器学习系统的能力,并对其进行持续优化。否则只能算是机器学习搬砖工人,算不得合格的工程师。出了问题也不会解决,更谈不上对系统做优化。

学习机器学习的基础理论的目的不仅仅是学会如何构建机器学习系统,更重要的是,这些基础理论里面体现的是一套思想和思维模式,其内涵包括概率性思维、矩阵化思维、最优化思维等多个子领域,这一套思维模式对于在当今这个大数据时代做数据的处理、分析和建模是非常有帮助的。如果你脑子里没有这套思维,面对大数据环境还在用老一套非概率的、标量式的思维去思考问题,那么思考的效率和深度都会非常受限。

机器学习的理论内涵和外延非常之广,绝非一篇文章可以穷尽,所以在这里我列举了一些比较核心,同时对于实际工作比较有帮助的内容进行介绍,大家可在掌握了这些基础内容之后,再不断探索学习。

4.开发语言和开发工具

掌握了足够的理论知识,还需要足够的工具来将这些理论落地,这部分我们介绍一些常用的语言和工具。

5.架构设计

最后我们花一些篇幅来谈一下机器学习系统的架构设计。

所谓机器学习系统的架构,指的是一套能够支持机器学习训练、预测、服务稳定高效运行的整体系统以及他们之间的关系。

在业务规模和复杂度发展到一定程度的时候,机器学习一定会走向系统化、平台化这个方向。这个时候就需要根据业务特点以及机器学习本身的特点来设计一套整体架构,这里面包括上游数据仓库和数据流的架构设计,以及模型训练的架构,还有线上服务的架构等等。这一套架构的学习就不像前面的内容那么简单了,没有太多现成教材可以学习,更多的是在大量实践的基础上进行抽象总结,对当前系统不断进行演化和改进。但这无疑是算法工程师职业道路上最值得为之奋斗的工作。在这里能给的建议就是多实践,多总结,多抽象,多迭代。

6.机器学习算法工程师领域现状

现在可以说是机器学习算法工程师最好的时代,各行各业对这类人才的需求都非常旺盛。典型的包括以下一些细分行业:

推荐系统。推荐系统解决的是海量数据场景下信息高效匹配分发的问题,在这个过程中,无论是候选集召回,还是结果排序,以及用户画像等等方面,机器学习都起着重要的作用。

广告系统。广告系统和推荐系统有很多类似的地方,但也有着很显著的差异,需要在考虑平台和用户之外同时考虑广告主的利益,两方变成了三方,使得一些问题变复杂了很多。它在对机器学习的利用方面也和推荐类似。

搜索系统。搜索系统的很多基础建设和上层排序方面都大量使用了机器学习技术,而且在很多网站和App中,搜索都是非常重要的流量入口,机器学习对搜索系统的优化会直接影响到整个网站的效率。

风控系统。风控,尤其是互联网金融风控是近年来兴起的机器学习的又一重要战场。不夸张地说,运用机器学习的能力可以很大程度上决定一家互联网金融企业的风控能力,而风控能力本身又是这些企业业务保障的核心竞争力,这其中的关系大家可以感受一下。

但是所谓“工资越高,责任越大”,企业对于算法工程师的要求也在逐渐提高。整体来说,一名高级别的算法工程师应该能够处理“数据获取数据分析模型训练调优模型上线”这一完整流程,并对流程中的各种环节做不断优化。一名工程师入门时可能会从上面流程中的某一个环节做起,不断扩大自己的能力范围。

除了上面列出的领域以外,还有很多传统行业也在不断挖掘机器学习解决传统问题的能力,行业的未来可谓潜力巨大。

182评论

抗忙北鼻要抱抱

BAT企业的算法工程师是这样工作的:问题抽象、数据采集和处理、特征工程、建模训练调优、模型评估、上线部署。(具体操作可以看阿里算法专家chris老师的算法工作流视频算法工作流是怎样的?)而一个算法工程师真正值钱的地方在于问题抽象和上线部署这两个。

以上是一个算法工程师的工作流,所以你要做以上内容的话,需要的技能和知识有以下这些:

①机器学习的基础是数学,入门AI必须掌握一些必要的数学基础,但是并不是全部的数学知识都要学,只学工作上实际有用到的,比如是微积分、概率论、线性代数、凸优化等这些。

②数据分析里需要应用到的内容也需要掌握,但不是网上所说的从0开始帮你做数据分析的那种,而是数据挖掘或者说是数据科学领域相关的东西,比如要知道计算机里面怎么挖掘数据、相关的数据挖掘工具等等

补足了以上数学和数据挖掘基本知识,才可以正式进行机器学习算法原理的学习。

③算法方面需要掌握一些基本的框架:python、spark、mllib、scikit-learning、pytorch、TensorFlow,数据方面需要懂得HQL、numpy、pandas,如果你本身是后台开发、app开发、数据分析、项目管理,则是一个学习算法的一个加分项。

④最后需要对人工智能有全局的认知,所以菜鸟窝的机器学习vip大课会讲授到算法理论,包括机器学习、深度学习两大模块,相关的算法原理、推导和应用的掌握,以及最重要算法思想。

178评论

再不疯狂我们就死了

算法工程师要求很高的数学水平和逻辑思维。需要学习高数,线性代数,离散数学,数据结构和计算机等课程

算法工程师是一个非常高端的职位;专业要求:计算机、电子、通信、数学等相关专业;学历要求:本科及其以上的学历,大多数是硕士学历及其以上;语言要求:英语要求是熟练,基本上能阅读国外专业书刊;必须掌握计算机相关知识,熟练使用仿真工具MATLAB等,必须会一门编程语言。简介:算法工程师根据研究领域来分主要有音频视频算法处理、图像技术方面的二维信息算法处理和通信物理层、雷达信号处理、生物医学信号处理等领域的一维信息算法处理。在计算机音视频和图形图形图像技术等二维信息算法处理方面目前比较先进的视频处理算法:机器视觉成为此类算法研究的核心;另外还有2D转3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),运动估计运动补偿算法(Motion estimationMotion Compensation),去噪算法(Noise Reduction),缩放算法(scaling),锐化处理算法(Sharpness),超分辨率算法(Super Resolution),手势识别(gesture recognition),人脸识别(face recognition)。在通信物理层等一维信息领域目前常用的算法:无线领域的RRM、RTT,传送领域的调制解调、信道均衡、信号检测、网络优化、信号分解等。另外数据挖掘、互联网搜索算法也成为当今的热门方向。算法工程师逐渐往人工智能方向发展。

7评论

相关问答