面经系列 | Python,数据结构,神经网络
本文轉(zhuǎn)自Datawhale,禁二次轉(zhuǎn)載
目錄
人工神經(jīng)網(wǎng)絡(luò)中為什么ReLu要好過于tanh和sigmoid function?
MLE的解是否總是存在,若存在是否唯一?
L1用于邏輯回歸,C 值從 0 增加至非常大會有什么變化?
Python
生成器與迭代器的區(qū)別
解釋在Python中,函數(shù)名為什么可當作參數(shù)用?
利用分治算法進行歸并排序的一般步驟?
人工神經(jīng)網(wǎng)絡(luò)中為什么ReLu要好過于tanh和sigmoid function?
首先,sigmoid函數(shù)將數(shù)值擠壓到【0,1】,存在兩大不足:
函數(shù)飽和使梯度消失。當神經(jīng)元的激活在接近0或1處時會飽和,梯度幾乎為0,導(dǎo)致梯度消失,幾乎就有沒有信號通過神經(jīng)傳回上一層。
輸出不是零中心的。如果輸入神經(jīng)元的數(shù)據(jù)總是正數(shù),那么關(guān)于w的梯度在反向傳播的過程中,將會要么全部是正數(shù),要么全部是負數(shù),這將會導(dǎo)致梯度下降權(quán)重更新時出現(xiàn)z字型的下降
然后,tanh函數(shù)將數(shù)值擠壓到【-1,1】,解決了sigmoid不是以零為中心的問題,但仍然存在飽和問題。
于是,ReLu登場了,相較于sigmoid和tanh函數(shù)。ReLu具有單側(cè)抑制、相對寬闊的興奮邊界、稀疏激活性等特性,關(guān)鍵Relu在激活區(qū)域是線性的,極大的提升了收斂效率,也沒指數(shù)運算,減少了計算量。
MLE的解是否總是存在,若存在是否唯一?
下列關(guān)于極大似然估計(Maximum Likelihood Estimate,MLE),說法正確的是(多選)?
A. MLE 可能并不存在
B. MLE 總是存在
C. 如果 MLE 存在,那么它的解可能不是唯一的
D. 如果 MLE 存在,那么它的解一定是唯一的
答案:AC
Datawhale優(yōu)秀回答者@孫凱A@lbert?
極大似然估計是根據(jù)樣本數(shù)據(jù)來求解模型參數(shù),要先寫出參數(shù)的似然函數(shù),然后對似然函數(shù)進行求導(dǎo),牽扯到求導(dǎo)就要考慮導(dǎo)數(shù)不存在的情況,如果似然函數(shù)的一階導(dǎo)不存在,那么MLE就不存在,而且似然函數(shù)取得極大值時對應(yīng)的參數(shù)也不唯一舉個MLE不唯一的例子:設(shè)隨機變量為,待估計參數(shù)為,假設(shè)服從以下分布:,假設(shè)隨機變量只能夠取大于或等于的數(shù)值。現(xiàn)在我有n個樣本點 ,全部是從總體X中隨機抽樣的,要用極大似然估計。由于X的分布函數(shù)是:,所以密度函數(shù)就是這樣似然函數(shù)就是目標就是要求使得上述函數(shù)達到最大值。顯然任何一個都可以做到這一點,因為當時,對數(shù)里面的數(shù)值從大于0的方向趨于0,整個ln是趨于負無窮大,從而目標函數(shù)是正無窮大。于是極大似然估計得到的參數(shù)估計值就不是唯一的.任何一個樣本點的數(shù)值都是該參數(shù)的極大似然估計值,一般地,只要你的似然函數(shù)沒有唯一的極值點,極大似然估計就不唯一。
L1用于邏輯回歸,C 值從 0 增加至非常大會有什么變化?
你正在使用帶有 L1 正則化的 logistic 回歸做二分類,其中 C 是正則化參數(shù),w1 和 w2 是 x1 和 x2 的系數(shù)。當你把 C 值從 0 增加至非常大的值時,下面哪個選項是正確的?
A 第一個 w2 變成 0,接著 w1 也變成 0
B 第一個 w1 變成 0,接著 w2 也變成 0
C w1 和 w2 同時變成了 0
D 即使 C 變?yōu)榇笾?#xff0c;w1 和 w2 也不能變成 0
答案:C
Datawhale優(yōu)秀回答者@野比大雄
Python
生成器與迭代器的區(qū)別
Datawhale優(yōu)秀回答者@鵬?
1.有iter()和next()魔法方法的對象,都是迭代器(可以為你的類添加迭代器行為);
2.生成器是一個用于創(chuàng)建迭代器的工具,它們的寫法類似標準的函數(shù),但當它們要返回數(shù)據(jù)時會使用yield語句。每次對生成器調(diào)用next()時,它會從上次離開位置恢復(fù)執(zhí)行(它會記住上次執(zhí)行語句時的所有數(shù)據(jù)值)。
可以用生成器來完成的操作同樣可以用基于類的迭代器來完成。但生成器的寫法更為緊湊,因為它會自動創(chuàng)建 iter() 和 next() 方法。另一個關(guān)鍵特性在于局部變量和執(zhí)行狀態(tài)會在每次調(diào)用之間自動保存。這使得該函數(shù)相比使用類的實例變量的方式更易編寫且更為清晰。除了會自動創(chuàng)建方法和保存程序狀態(tài),當生成器終結(jié)時,它們還會自動引發(fā) StopIteration。這些特性結(jié)合在一起,使得創(chuàng)建迭代器能與編寫常規(guī)函數(shù)一樣容易。
Python中,函數(shù)名為什么可以當作參數(shù)用?(Python函數(shù)面試類型)
Datawhale優(yōu)秀回答者@把欄桿拍遍
python中函數(shù)是第一等對象,第一等對象的一般特征:
1.運行時(runtime)創(chuàng)建
2.將變量或者元素賦值在一個數(shù)據(jù)結(jié)構(gòu)當中
3.可以作為一個參數(shù)傳遞給一個函數(shù)
4.可以作為函數(shù)的結(jié)果返回
Python中對象才是一等公民,一切都是對象,int是對象,函數(shù)是對象,class 也是一種對象。
函數(shù)是一個對象,跟其它對象一樣是最終繼承自PyObject,函數(shù)可以像任何對象那樣進行賦值、傳遞、名字重綁定、賦值、裝進容器、垃圾回收……
順帶一提,函數(shù)能作為參數(shù)和函數(shù)式編程可完全是兩碼事。Python支持了一些函數(shù)式特性,但并不是個以函數(shù)為核心的語言,函數(shù)也不是一等公民。因為函數(shù)式編程并不很Pythonic。
利用分治算法進行歸并排序的一般步驟
Datawhale優(yōu)秀回答者@Dazzle洪榮
分治策略是對大型問題的一種有效的方法,將一些大規(guī)模問題轉(zhuǎn)換為一些小規(guī)模問題,分而治之,當程序規(guī)模擴大時效率將下降,這時候我們可以采取分治的方法。首先分治算法模型有三個基本步驟:
1.分解:將原問題分解成若干個子問題,這些子問題是原問題的規(guī)模較小的實例
2.解決:將這些子問題再進一步遞歸的分解。當若干子問題的規(guī)模足夠小時,就直接求解
3.合并:將上述子問題的解合并成最終問題的解
任何用分治思想實現(xiàn)的各種算法都可以用上面3步分解出來看。以歸并排序看一下,結(jié)合上面3步,歸并排序分成3步:
1.分解:將n元素的數(shù)組分成n/2個元素的兩個子序列
2.解決:將這些子序列再分解成更小規(guī)模的序列,遞歸地排序兩個子序列
3.合并:合并這兩個已排好序的子序列生成最終答案。
推薦閱讀:
數(shù)據(jù)結(jié)構(gòu)之動態(tài)規(guī)劃問題
總結(jié)
以上是生活随笔為你收集整理的面经系列 | Python,数据结构,神经网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构之动态规划问题
- 下一篇: Jupyter与PyCharm不可兼得?