面经系列 | Python,数据结构,神经网络
本文轉自Datawhale,禁二次轉載
目錄
人工神經網絡中為什么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.合并:合并這兩個已排好序的子序列生成最終答案。
推薦閱讀:
數據結構之動態規劃問題
總結
以上是生活随笔為你收集整理的面经系列 | Python,数据结构,神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构之动态规划问题
- 下一篇: Jupyter与PyCharm不可兼得?