日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

读《数学之美》有感

發布時間:2024/4/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读《数学之美》有感 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

但是真正做好一件事沒有捷徑,需要一萬小時的專業訓練和努力。 ———— 《數學之美》

<1>關于搜索引擎

1.搜索引擎的組成


在《數學之美》中,吳軍博士把搜索引擎的關鍵提煉成了3個方面:

1.下載 ———— 通過網路爬蟲實現 。搜素引擎的網絡爬蟲問題應該定義成“如何在有限的時間內最多地爬下最重要的網頁”。首先,各個網站中最重要的網頁肯定是首頁,所以在這個前提下,廣度搜索(BFS)明顯優于深度搜索(DFS)。而實際的網絡爬蟲都是由成千上萬的服務器組成的,對于一個網站,需要一次性把這個網站的內容都下載下來,而不是先下載5%,然后到第二輪再繼續下來,所以這個就有點類似于(DFS)。這個的原因和爬蟲的分布式結構以及網絡通信的握手成功成本有關。同時,爬蟲對網頁遍歷的次序不是簡單的BFS或者DFS,所以就需要一個相對復雜的下載優先級排序的方法,這個管理優先級的子系統一般成為調度系統

2.索引 ———— 搜索引擎能在極短的時間內找到成千上萬的搜索結果,是通過索引的方法來實現的。最簡單的索引 就是對于一個確定的關鍵字,用01來表示一篇文章或者一個網頁是否含有這個關鍵字,但是這樣有多少個網頁或者多少篇文章,這個二進制數就有多少位。雖然計算機處理二進制數的速度很快,但是由于這個索引十分龐大,這就需要把索引分成很多份,分別存儲在不同的服務器中。沒當接受一個查詢的時候,這個查詢就被分發到這些不同的服務器上,并行的處理請求,然后再把結果發送到主服務器中進行合并處理,最后返回給用戶。

3.排序 ————PageRank算法 。Google的PageRanke算法由佩奇和布林發明。這個算法的思想 在于民主表決,Y的網頁排名pagerank來源于指向這個網頁的所有網頁X1、X2...Xk的權重之和。其中佩奇認為,X1、X2...Xk的權重分別是多少,這個取決去這些網頁本身的排名。但是這就成為了一個先有雞,還是先有蛋的問題。而解決這個問題的是布林,他把這個問題變成了一個二維矩陣相乘的問題,并且用迭代的方法解決了這個問題。他們先假定所有網頁的排名都是一樣的,并且根據這個初始值進行不斷的迭代。從理論上證明,無論初始值如何選取,這種算法都保證了網頁排名的估計值能收斂到排名的真實值,而且這個排名是沒有任何人工干預的。在理論上,這個二維矩陣的元素有網頁數量的平方那么多,計算量是非常龐大的,而佩奇和布林利用稀疏矩陣計算的技巧,大大簡化了計算量,實現了這個網頁排名算法。計算量仍然十分龐大,所以Google的工程師發明了MapReduce這個并行計算工具,使得PageRank的并行計算完全自動化。

2.搜索技術——有限狀態機


在《數學之美》中還提到了本地搜索的最基本技術——有限狀態機
舉一個例子就是要搜索一個地址,這就需要判斷一個地址的正確性,同時非常準確地提煉出相應的地理信息(省、市、街道等)。這就就需要一個有限狀態機來完成,有限狀態機是一個特殊的有向圖,有一個開始狀態和一個終止狀態,就比如開始是“XX省”,然后一個箭頭既可以指向“XX市”,也可以指向“XX縣”,但是不能是從“XX市”指向“XX省”,這里面具體的實現算法書中也并沒有提到。

3.搜索中的最短路徑問題


在這之后還提到了一個就是全球導航和動態規劃(Dynamic Programming)的問題。就是要找出兩個點之間的最短距離問題。當然這個最短距離是帶有權重的,比如說花費的時間,消耗的金錢等等。

舉一個例子就是從北京到廣州的最短路徑,這時候可以把北京—>廣州的最短路徑拆成從北京—>石家莊石家莊—>廣州這兩條路徑,當這兩條路徑都是最短的時候,整體的路徑就都是最短的。但是可能會有疑問就是北京—>廣州的路徑就一定經過石家莊嗎?這個問題可以變成圖論中的最小割問題(吐槽圖論老師1萬字省略。。。),沒學過的可以想像一下,把你雙手的五個手指張開,并左右手按手指順序把手指尖碰在一起,這時從你左手臂到右手臂的這條路徑中,肯定都會經過大拇指、食指、中指、無名指、小拇指之中的其中一個,都由這五個手指組成的點或者邊就是圖論里面的最小割集或者最小邊集(比喻不是很恰當)。這時候打個比方,北京到廣州的最短路徑,就肯定會經過石家莊、天津、太原、鄭州和武漢這五個城市中的其中一個,然后繼續下去尋找局部的最短路徑,就可以大大降低最短路徑的計算復雜度。

<2>TF-IDF、聚類問題

1.TF-IDF是什么


在《數學之美》中提到了如何確定一個網頁和某個查詢的相關性,而這個搜索關鍵詞權重的科學衡量指標就是TF-IDF(Term-frequency/Inverse Document Frequency),即詞頻/逆文本頻率指數

其中TF指的是關鍵詞的頻率,比如說一個“原子能”的詞在一個共有1000個詞的網頁上出現了2詞,那么“原子能”的詞頻就是0.002,所以是多個詞組成的關鍵詞,就是把這些關鍵詞的TF相加
其中IDF指的是就是關鍵詞的權重,比如“原子能的應用”中,“原子能”的權重要大于“的”和“應用”的權重,公式為log(D/Dw),其中D是全部網頁的個數,如果“的”在所有網頁中都出現了的話,那么“的”的權重就是log(1)=0,這樣就能對于不同的關鍵詞有不同的權重。

2.新聞分類(聚類問題)和余弦相似度


除了搜索中評價網頁和某個查詢的相關性中用到TF-IDF,在新聞的分類,或者說聚類問題中,也用到了TF-IDF。把某一則新聞中所有的詞算出的TF-IDF,按它的在詞匯表中出現順序進行排列,就可以得到一個向量。比如說詞匯表共有64000個詞,那么沒有出現的詞的TF-IDF就是0,而這個向量就是這一則新聞的特征向量(Feature Vector)。這時候,就可以利用余弦定理來計算兩則新聞之間的夾角,而這個余弦的值就是兩則新聞的相關度,即余弦相似性。越小表示兩則新聞越相關,就越可以分在一類;如果算出來夾角是90度,那么就說明這兩則新聞完全不相關,余弦公式

3.奇異值(SVD)分解


這樣就可以根據余弦相似性的值設定閾值來對新聞進行分類。然而在計算的過程中,由于計算量很大,這是需要借助矩陣論的知識對這些計算量進行優化。在成千上萬的新聞和百萬的詞匯表的計算中(比如說矩陣的每一一行代表詞匯表中的每一個詞,矩陣的每一列代表一則新聞),要計算每一列新聞中兩兩之間的余弦相似度,就要進行奇異值分解(SVD分解),如果有N個詞和M篇文章,這就是一個MN的矩陣,此時M=1000000,N=500000,就是100萬50萬,總共5000億個元素。通過SVD分解,就能把這個大矩陣分解成一個100萬100的矩陣X,一個100100的矩陣B,和一個100*50萬的矩陣Y,這三個矩陣相乘的結果。這三個矩陣的元素共和為不超過1.5億,計算量和存儲量會大大減小。而這三個分解出來的矩陣也有非常清晰的物理含義,舉個例子:

—————————A矩陣——————————— X矩陣 ————— B矩陣 —————— Y矩陣

其中X矩陣的每一行表示一個詞,每一列表示一個語義相近的詞類
其中B矩陣表示詞的類和文章的類之間的相關性
其中Y矩陣是對文本的分類結果,每一行對應一個主題,每一列對應一個文本

4.相似哈希和信息指紋


當然余弦相似度還可以用于對比信息指紋的重復性,《數學之美》中還提到了相似哈希這個特殊的信息指紋,具體的計算方法可以去看《數學之美》P150頁。
相似哈希的特點就是,如果兩個網頁的相似哈希相差越小,這兩個網頁的相似性越高;如果兩個網頁相同,則相似哈希肯定相同;如果少數權重小的詞不同,其余的都相同,相似哈希也會幾乎相同。之所以看到相似哈希會有印象,也是由于上次參加的某個算法比賽中對作弊的代碼進行篩選的時候,主辦方就用的相似哈希這個評價標準,所以對于常見的跨語言作弊、替換變量名作弊的方法都能進行有效的識別。

5.K-mean算法


《數學之美》中提到聚類問題的時候,還提到了期望最大化算法,也就是K-means算法

K-means算法是隨機地挑出出一些類的中心,然后來優化這些中心,使得它們和真實的聚類中心盡可能一致。假設有N篇文章,我們想把它們分成K類,這時我們可以不知道K具體是多少,最終分成多少類就分成多少類。

K-means算法的步驟是:
1.隨機挑選K個點作為起始的中心;
2.計算所有點到這些聚類中心的距離(使用歐幾里德公式),將這些點歸到最近的一類中;
3.重新計算每一類的中心;
4.迭代,最終偏移非常小的時候得到收斂。
這一類算法的過程中,根據現有的模型,計算各個觀測數據輸入到模型中的計算結果,這個過程成為期望值計算過程,即E過程;接下來,重新計算模型參數,以最大化期望值,這一過程稱為最大化的成果,即M過程。這一類算法都稱為EM算法

<3>關于最大熵原理


最大熵原理指出,需要對一個隨機事件的概率分布進行預測的時候,我們的預測應當滿足全部已知的條件,而對未知的情況不要做任何的主觀假設。在這種情況下,概率分布最均勻,預測的風險最小。因為這時概率分布的信息熵最大,所以人們稱這種模型叫做“最大熵模型”。即“不要把所有的雞蛋放在一個籃子里”,因為當我們遇到不確定性的時候,就要保留各種可能性。

<4>關于機器學習和自然語言處理

1.圖靈和人工智能


機器學習(Machine Learning)是一門專門研究計算機怎樣模擬或者實現人類的學習,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的性能的學科。而最早提出機器智能設想的是計算機科學之父—————阿蘭·圖靈(Alan Turing)。他在1950年的《思想》雜志上發表了一篇題為“計算的機器和智能”的論文中,提出了一種驗證機器是否有智能的方法:讓人和機器進行交流,如果人無法判斷自己交流的對象是人還是機器的時候,就說明這個機器有了智能。后來這種方法被成為圖靈測試(Turning Test)

2.自然語言處理的歷史


而在自然語言的機器處理(自然語言處理)的歷史中,可以分成兩個階段:

1.一個是20世紀50年代到70年代,也就是從大約1950-1970的這段時間,全世界的科學家對計算機處理自然語言的認識都被自己局限在人類學習語言的方式上,就是用計算機模擬人腦。后面吳軍博士提到了這段時間對自然語言處理的研究主要是基于規則的方式,想讓計算機完成翻譯或者語音識別這樣只有人類才能完成的事情,就必須先讓計算機理解自然語言,即讓計算機有類似人類這樣的智能。比如學習語言的過程中要學習語法規則,詞性和構詞法等等,而這些規則有很容易用算法來描述,所以在當時大家對基于規則的自然語言處理很有信心。但是實際上,當用算法來描述這些規則的時候,所形成的語法分析樹十分的復雜,而且規則的數量眾多,耗時且有時會互相矛盾。所以在20世紀70時代,基于規則的句法分析走到了盡頭,也使得這段時間的成果近乎為零。

2.另一個階段是20世紀70年代后,一些先驅認識到基于數學模型和統計的方法才是正確的道路,所以自然語言處理進入了第二個階段。這種方式的思想在于統計,即大多數樣本怎么做
舉個例子就是:pen有兩個意思,一個意思是鋼筆,而另一個意思是圍欄。對于兩個句子“The pen is in the box.”和“The box is in the pen.”來說,正確的翻譯應該是“鋼筆在盒子里。”和“盒子在圍欄里。”,因為正常來說,盒子是不可能在鋼筆里的。

在20世紀70年代,給予統計的方法的核心模型是通信系統加隱含馬爾可夫模型。這個系統的輸入和輸出都是一維的符號序列,而且保持原有的次序。最高獲得成功的是語音識別是如此,后來第二個獲得成功的此詞性分析也是如此。而在句法分析中,輸入的是一維的句子,輸出的是二維的分析樹;在機器翻譯中,雖然輸出的依然是一維的句子,但是次序會有很大的變化,所以上述的方法就不太管用了。1988年,IBM的彼得·布朗(Peter Brown)等人提出了基于統計的機器翻譯方法,框架是正確的,但是由于缺乏足夠的統計數據和沒有足夠強大的模型來解決不同語言語序顛倒的問題,所以實際的效果很差,后來這些人去了文藝復興公司發財去了。而只有出現了基于有向圖的統計模型才能很好的解決復雜的句法分析這個問題。

<5>提到的計算機領域的科學家


1.阿蘭·圖靈(Alan Turing)————計算機科學之父
2.約翰·麥卡錫(John McCarthy)————圖靈獎獲得者,發明Lisp語言,斯坦福大學人工智能實驗室的主任
3.馬文·明斯基(Marvin Minsky)————圖靈獎獲得者,創建麻省理工學院(MIT)人工智能實驗室
4.納撒尼爾·羅切斯特(Nathaniel Rochester)————IBM的杰出計算機設計師
以上四人于1956年在達特茅斯學院舉辦的夏季人工智能研討會是計算機科學史上的一座里程碑,參加會議的包括下面兩位,總共10人。討論了當時計算機科學尚未解決的問題,包括人工智能、自然語言處理和神經網絡等。
5.赫伯特·西蒙(Herbert Simon)————圖靈獎獲得者,同時還是美國管理學家和社會科學家,經濟組織決策管理大師,第十屆諾貝爾經濟學獎獲獎者
6.艾倫·紐維爾(Allen Newell)————圖靈獎獲得者
7.高德納·克努特(Donald Knuth)————圖靈獎獲得者,算法和程序設計技術的先驅者,計算機排版系統TEX和METAFONT的發明者,提出用計算復雜度來衡量算法的耗時
8.弗里德里克·賈里尼克(Frederick Jelinek)————領導IBM華生實驗室,提出采用統計的方法解決語音識別問題
9.米奇·馬庫斯(Mitch Marcus)————設立和領導了LDC項目,采集和整理全世界主要語言的語料(其中著名的是Penn Tree Bank),并培養了一批世界級的科學家

<6>統計語言模型


計算機處理自然預言,一個基本的問題就是為自然語言這種上下文相關的特性建立數學模型。這個數學模型就是在自然語言處理中常說的統計語言模型

1.怎樣求一個句子S合理的可能性


賈里尼克的思想就是:認為一個句子是否合理,就是看它的可能性大小如何。
假定S表示某一個有意義的句子,由一連串特定順序排列的詞w1、w2...wn組成,這里n是句子的長度。其中S出現概率是:

2.一個句子S合理的可能性和句中每個詞都有關


利用條件概率公式

得:

其中,P(w1)是第一個詞出現的概率,P(w2|w1)是在已知第一個詞的前提下,第二個詞出現的概率,到了第n個詞,這個詞出現的概率和前面所有的詞出現的概率都有關。

3.馬爾可夫假設:后一個出現的概率只和前一個詞有關(條件概率)


計算第一個詞出現的概率很簡單,即P(w1),第二個詞的條件概率P(w2|w1)很是可以計算的,但是越到后面,計算量就越來越大。到了19世紀至20世紀初的這段時間,俄羅斯有一個數學家——馬爾可夫(Andrey Markov)就提出了方法,就是遇到這種情況,就假設任意一個詞Wi出現的概率只和前面一個詞Wi-1有關。這種假設在數學上成為馬爾可夫假設。這下公式變成:

以上這個公式對應了統計語言模型中的二元模型(Bigram Model)

4.如何計算條件概率——分別計算聯合概率和邊緣概率


接下來的問題變成了如何計算條件概率

當要計算聯合概率P(Wi-1,Wi)邊緣概率P(Wi-1)的時候,需要大量的機讀文本,也就是語料庫。其中
是Wi-1,Wi這個二元詞組在整個語料庫中前后相鄰出現的次數,而 是Wi-1這個詞在整個語料庫中出現的次數,這兩個比值成為這個二元詞組或者詞的相對頻度

根據大數定理,當統計量足夠充分的時候,相對頻度就等于概率,即


所以,要計算的條件概率就等于

5.高階模型的計算量


對于高階語言模型,是假定文本中的每個詞都和前面的N-1個詞有關,而和更前面的詞無關。對于N元模型的空間復雜度,幾乎是N的指數函數O(|V|^N)時間復雜度也是一個指數函數,O(|V|^N-1).所以N的大小決定了空間復雜度和時間復雜度的大小。當N從1到2,從2再到3的時候,模型的效果上升的很明顯,但是從3到4的時候,效果的提升就不是很顯著了。

模型訓練中的問題:
零概率問題——假定要訓練一個漢語的語言模型,漢語的詞匯量大致是20萬這個量級,訓練一個3元模型就需要200000^3 = 8*10^15這么多的參數,但是由于訓練數據量不可能達到這么多,所以如果用直接的比值計算概率,大部分的條件概率依然是零,這種模型我們稱之為“不平滑”。對于這種問題,圖靈提出了一種在統計中相信可靠的統計數據,而對不可信的統計數據大折扣的一種概率估計方法,同時將折扣出來的那一小部分概率給予未看見的事件。這個重新估算概率的公式后來被稱為古德-圖靈估計

<7>隱含馬爾可夫模型

1.已經求出一個句子S出現的概率


當求出了一個句子S出現概率之后:

2.在已知一個英文句子O出現概率的情況下,求漢語句子S出現概率最大的那個S,即O最有可能被翻譯成S(機器翻譯)


對于一個觀測到的信號o1,o2,……,on來還原發送的信號s1,s2,……,sn,實際的例子可以是根據收到的英文,求原來漢語的意思,這就是機器翻譯的原理。寫成數學表達式就是求以下公式有最大值時候的那個s1,s2,s3……:

3.利用貝葉斯公式化簡


利用貝葉斯公式,可以把上述公式轉換成(把條件概率公式用了兩次):

其中P{s1,s2,s3,……|o1,o2,o3,……}表示信息s1,s2,s3,……在傳輸之后變成接收的信號o1,o2,o3,……的可能性;
而P{s1,s2,s3,……}表示s1,s2,s3,……本身是一個在接收端合乎情理的信號的可能性;最后而P{o1,o2,o3,……}表示在發送端產生信息o1,o2,o3,……的可能性(注意s和o在經過了條件概率公式后交換了發送和接收的位置),這時由于P{o1,o2,o3,……}是一個可以忽略的常熟,所以上面公式等價于

4.再次利用馬爾可夫假設(轉移概率)


這時,可以用隱含馬爾可夫模型來解決這個問題:隱含馬爾可夫模型其實并不是19世紀俄羅斯數學家馬爾可夫發明的,而是美國數學家鮑姆等人在20世紀六七十年代發表的一系列論文中提出的,隱含馬爾可夫模型的訓練方法(鮑姆-韋爾奇算法)也是以他的名字命名的。隱含馬爾可夫模型之所以是隱含的,是因為它每一個時刻的狀態是不可見的。而對于馬爾可夫鏈來說,對于一個隨機時間序列S1,S1,S3,……St中的每一個狀態的概率,不只其本身是隨機的,也就是說它可以是馬爾可夫鏈中的任何一個狀態,而且它還和前一個狀態有關,這兩點說明了St的概率有兩個維度的不確定性。在任一時刻t的狀態St是不可見的且是不確定的,因為這時候只知道輸出的序列Ot,所以觀察者不能通過觀察到s1,s1,s3,……sr來推測轉移概率等參數。但是可以通過Ot來推測這些參數。
此時根據上節馬爾可夫提出的只和前一個有關的假設:




所以,可得


其中P{s1,s2,s3,……}就是上一節求出的每一個句子是否合理的可能性,也就是從收到的英文{O1,O2,O3,……}求原來的漢語{S1,S2,S3,……}的過程中,這個漢語句子{s1,s2,s3,……}存在的合理性。可以理解為“The box is in the pen”被翻譯成“盒子在鋼筆中”和“盒子在圍欄中”這兩個句子哪個更合理。
P{s1,s2,s3,……|o1,o2,o3,……}根據應用的不同而有不同的名稱,在語音識別中被成為“聲學模型”,在機器翻譯中是“翻譯模型”,而在拼寫校正中是“糾錯模型”。

5.如何求轉移概率和生成概率


此時,問題變成了求轉移概率和生成概率乘積的最大值的問題
1.轉移概率

其中N(St-1)就是在有了足夠多的人工標記的數據后,經過狀態St-1的次數(可以理解為在語料庫中某個詞St-1出現的次數),而N(St-1,St)是在經過St-1這個狀態后轉移到St這個狀態的次數(可以理解為在語料庫中詞St-1后出現詞St的次數),而這兩個數的比值就是轉移概率P(St|St-1)的值
同理
2.生成概率

其中N(St)就是在有了足夠多的人工標記的數據后,經過狀態St的次數(可以理解為在語料庫中某個詞St出現的次數),而N(Ot,St)是在經過Ot這個狀態后轉移到St這個狀態的次數(可以理解為在語料庫中英文單詞Ot被翻譯成漢語詞語St的次數),而這兩個數的比值就是生成概率P(Ot|St)的值

6.如何求轉移概率和生成概率乘積的最大值


當求出轉移概率和生成概率之后,就能求出一個已知的英文句子{O1,O2,O3,……}被翻譯成{S1,S2,S3,……}的所有可能性的大小,然后下一步就是要求這所有的可能性中最大的時候的那個{S1,S2,S2,……},這需要用到維特比算法。維特比算法是一個動態規劃算法在求所以可能性中最大的值的時候,也相當于求一個求概率最大的路徑(或者最短路徑)的問題。在已知輸出的英文{O1,O2,O3,……}的情況下,可能有很多種不同的路徑能從而得到不同的中文{S1,S2,S3,……},這些路徑組成了一個成為籬笆網絡(Lattice)的圖,其中我們要求的是最可能的,也就是概率最大的那個中文{S1,S2,S3,……}。
舉個例子就是Bush可以翻譯成布什,也可以翻譯成灌木叢,但是當Bush的前一個詞是總統的時候,Bush翻譯成布什的概率最大。這時就可以參考從北京到廣州的最短路徑的問題,使用維特比算法對計算量進行化簡。

有監督的訓練需要大量人工標記的數據,實際上很多應用不可能做到,就翻譯模型的訓練來說,這需要大量的中英文對照的語料,還要把中英文詞語一一對應起來。所以在實際的訓練中常常使用的是無監督的訓練算法,即鮑姆-韋爾奇算法。鮑姆-韋爾奇算法的思想是首先尋找一組能夠產生輸出序列O的模型參數,這個模型是一定存在的,因為當轉移概率P和輸出概率Q為均勻分布的時候,模型可以產生任何輸出。然后在這個模型的基礎上算出這個模型產生輸出序列O的概率,并根據這個模型可以找到一個更好的模型,這個新的模型輸出序列O的概率大于原來的模型。經過了不斷的迭代從而不斷的估計新的模型參數,使得輸出序列O的概率最大化。這個過程被稱為期望最大化(Expectation-Maximization),簡稱EM過程
具體的方法和公式《數學之美》中并沒有細說,具體的過程就沒能理解了。

結束,理解有錯誤的話望指出

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的读《数学之美》有感的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。