Python,数据结构,神经网络-面经

来自:Datawhale(微信号:Datawhale),作者:learners,图片 | 伊小雪,排版 | 伊小雪,知识总结 | Summer

目录

  • 人工神经网络中为什么ReLu要好过于tanh和sigmoid function?

  • MLE的解是否总是存在,若存在是否唯一?

  • L1用于逻辑回归,C 值从 0 增加至非常大会有什么变化?

  • Python

    • 生成器与迭代器的区别

    • 解释在Python中,函数名为什么可当作参数用?

  • 利用分治算法进行归并排序的一般步骤?



人工神经网络中为什么ReLu要好过于tanh和sigmoid function?


首先,sigmoid函数将数值挤压到【0,1】,存在两大不足:

  • 函数饱和使梯度消失。当神经元的激活在接近0或1处时会饱和,梯度几乎为0,导致梯度消失,几乎就有没有信号通过神经传回上一层。

  • 输出不是零中心的。如果输入神经元的数据总是正数,那么关于w的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数,这将会导致梯度下降权重更新时出现z字型的下降

然后,tanh函数将数值挤压到【-1,1】,解决了sigmoid不是以零为中心的问题,但仍然存在饱和问题。

于是,ReLu登场了,相较于sigmoid和tanh函数。ReLu具有单侧抑制、相对宽阔的兴奋边界、稀疏激活性等特性,关键Relu在激活区域是线性的,极大的提升了收敛效率,也没指数运算,减少了计算量。



MLE的解是否总是存在,若存在是否唯一?

下列关于极大似然估计(Maximum Likelihood Estimate,MLE),说法正确的是(多选)?

A. MLE 可能并不存在

B. MLE 总是存在

C. 如果 MLE 存在,那么它的解可能不是唯一的

D. 如果 MLE 存在,那么它的解一定是唯一的

答案:AC


Datawhale优秀回答者@孙凯A@lbert


极大似然估计是根据样本数据来求解模型参数,要先写出参数的似然函数,然后对似然函数进行求导,牵扯到求导就要考虑导数不存在的情况,如果似然函数的一阶导不存在,那么MLE就不存在,而且似然函数取得极大值时对应的参数也不唯一举个MLE不唯一的例子:设随机变量为,待估计参数为,假设服从以下分布:,假设随机变量只能够取大于或等于的数值。现在我有n个样本点 ,全部是从总体X中随机抽样的,要用极大似然估计。由于X的分布函数是:,所以密度函数就是这样似然函数就是目标就是要求使得上述函数达到最大值。显然任何一个都可以做到这一点,因为当时,对数里面的数值从大于0的方向趋于0,整个ln是趋于负无穷大,从而目标函数是正无穷大。于是极大似然估计得到的参数估计值就不是唯一的.任何一个样本点的数值都是该参数的极大似然估计值,一般地,只要你的似然函数没有唯一的极值点,极大似然估计就不唯一。



L1用于逻辑回归,C 值从 0 增加至非常大会有什么变化?

你正在使用带有 L1 正则化的 logistic 回归做二分类,其中 C 是正则化参数,w1 和 w2 是 x1 和 x2 的系数。当你把 C 值从 0 增加至非常大的值时,下面哪个选项是正确的?

A 第一个 w2 变成 0,接着 w1 也变成 0

B 第一个 w1 变成 0,接着 w2 也变成 0

C w1 和 w2 同时变成了 0

D 即使 C 变为大值,w1 和 w2 也不能变成 0

答案:C


Datawhale优秀回答者@野比大雄


Python

生成器与迭代器的区别


Datawhale优秀回答者@鹏 


1.有iter()和next()魔法方法的对象,都是迭代器(可以为你的类添加迭代器行为);

2.生成器是一个用于创建迭代器的工具,它们的写法类似标准的函数,但当它们要返回数据时会使用yield语句。每次对生成器调用next()时,它会从上次离开位置恢复执行(它会记住上次执行语句时的所有数据值)。

可以用生成器来完成的操作同样可以用基于类的迭代器来完成。但生成器的写法更为紧凑,因为它会自动创建 iter() 和 next() 方法。另一个关键特性在于局部变量和执行状态会在每次调用之间自动保存。这使得该函数相比使用类的实例变量的方式更易编写且更为清晰。除了会自动创建方法和保存程序状态,当生成器终结时,它们还会自动引发 StopIteration。这些特性结合在一起,使得创建迭代器能与编写常规函数一样容易。



Python中,函数名为什么可以当作参数用?(Python函数面试类型)

Datawhale优秀回答者@把栏杆拍遍


python中函数是第一等对象,第一等对象的一般特征:

1.运行时(runtime)创建

2.将变量或者元素赋值在一个数据结构当中

3.可以作为一个参数传递给一个函数

4.可以作为函数的结果返回

Python中对象才是一等公民,一切都是对象,int是对象,函数是对象,class 也是一种对象。

函数是一个对象,跟其它对象一样是最终继承自PyObject,函数可以像任何对象那样进行赋值、传递、名字重绑定、赋值、装进容器、垃圾回收……

顺带一提,函数能作为参数和函数式编程可完全是两码事。Python支持了一些函数式特性,但并不是个以函数为核心的语言,函数也不是一等公民。因为函数式编程并不很Pythonic。



利用分治算法进行归并排序的一般步骤

Datawhale优秀回答者@Dazzle洪荣


分治策略是对大型问题的一种有效的方法,将一些大规模问题转换为一些小规模问题,分而治之,当程序规模扩大时效率将下降,这时候我们可以采取分治的方法。首先分治算法模型有三个基本步骤:

1.分解:将原问题分解成若干个子问题,这些子问题是原问题的规模较小的实例

2.解决:将这些子问题再进一步递归的分解。当若干子问题的规模足够小时,就直接求解

3.合并:将上述子问题的解合并成最终问题的解

任何用分治思想实现的各种算法都可以用上面3步分解出来看。以归并排序看一下,结合上面3步,归并排序分成3步:

1.分解:将n元素的数组分成n/2个元素的两个子序列

2.解决:将这些子序列再分解成更小规模的序列,递归地排序两个子序列

3.合并:合并这两个已排好序的子序列生成最终答案。

推荐↓↓↓
人工智能与大数据
上一篇:GitHub上能让你重拾学习热情的AI项目:权游预测/AI作画/与AlphaZero对弈 下一篇:如何智能化改造工单系统分发