思考乙個模式識別與機器學習相關的問題

2021-04-07 08:35:52 字數 1910 閱讀 6379

(上高中時產生的想法,但不知道有沒有人做過相關的研究)

我們知道,模式識別與機器學習方法在文字掃瞄識別和手寫識別領域有著非常成功的應用,我們可以通過斷的指出機器識別手寫文字的錯誤來讓機器逐漸適應我們的手寫字型,從而不斷提高機器的識別正確率。但這種識別的乙個弱點在於,我們總需要人為的指出機器識別的錯誤,機器是不可能自己覺得自己有錯的。

設想一種有前提約束的條件,例如,要識別一串檔案,裡面的數字5和字母s很像,機器並不知道到底應該是哪個,如果我們事先已經告訴機器,這裡面只有數字沒有字母,那麼機器會很「自信」的認為結果應該是5,即使它的樣子再像s也沒關係。這也就是說,通過事先制定好的約束條件,可以起到提高識別正確率,樹立機器自信心的作用。

我的想法是這樣的,比如我們拿到一厚本列印好的程式**,但沒有電子的源版,現在需要把這些**輸入計算機器並讓它編譯執行,人工來做工作量是很可觀的,而機器去識別的話,基本上不會得到能直接使用的**,比如全形標點與半形標點,比如冒號與分號等,這些因素導致識別後的**必須進行人工校對整理,才能夠使用。但是我們知道,電腦程式的源**在語法是上有著非常嚴格的要求的,不滿足語法的**一定會被編譯器斃掉,那麼,我們能不能把這種即定的「語法」作為事先制定好的規則,從而指導機器進行識別,讓機器自己能夠分析出正確的結果呢?

比如,一段列印好的**:

void myfunc()

這是一段符合c語言標準的**,假如由於列印的關係,使得紙面上「a++」後面的分號不是很清楚了,看上去更像乙個冒號,如果按照現有的識別程式來做,可能識別的結果就會成為「a++:」,但是學過c語言的人都知道,這樣寫是不符合c語言語法的,把這樣的程式送去給編譯器肯定是不能通過的。而如果我們的識別程式在識別之前就已經知道了c語言的語法,知道這個地方不能是冒號而可以是分號,那麼就會自動的把它更正為分號,因為有編譯器這位鐵面包公的存在,識別程式是不可能蒙混過關的。

可以發現,這裡與傳統的文字識別相比增加了「程式語法」這個輸入項,這一項作為我們人為輸入給計算機的先驗知識,用來指導和約束識別程式的行為,從而有望把識別正確率提高到接近100%的程度。

這裡說的是一種比較理想的情況,它假設除了這個冒號/分號以外都已經被正確識別了,程式才能夠通過語法來辨別這裡該是什麼號,實際情況下疑點會更多,也就更需要計算機做智慧型化的分析。實際操作起來還有其他複雜的問題,一方面是如何有效的表達程式語言的語法,另一方面也要求輸入的原件不應該有太重大的錯誤,如果這裡出現的即不是冒號也不是分號而是一堆漢字,那麼計算機就分特了。

還有乙個問題,就是計算機為什麼知道冒號不行就試分號呢?這裡我想把它分為兩種情況。

第一種情況下,識別程式可以清晰的分為兩部分,第一部分按照傳統的識別方法得到識別結果,比如通過計算,它認為這裡是冒號的可能是50%,是分號的可能是48%,其他為2%,那麼取可能最大的,也就是冒號了。這個結果作為第一部分程式的輸出,同時也是第二個程式的輸入,第二個程式事先要非常清楚c語言的語法,同時,我們還人為的制定了很多相似規則,例如告訴計算機,冒號和分號很像,如果乙個不行可以試試另乙個,在這種情況下計算機根據人為制定好的規則去判斷到底應該是哪乙個,從而得到正確的結果。

第二種情況下,識別程式並不直接得到乙個固定的結果,而是把可能性大於某一閾值的結果都列為候選,例如這裡冒號和分號的可能都很大,雖然冒號更大一些,但我們對可能都大的結果並不進行排序,而是公平對待,讓編譯器說了算。這時只有分號可以得到編譯器的認可,那麼結果就是分號了。這種情況下人事先不需要告訴計算機哪個符號和哪個符號更相似,而是讓計算機自己去學習,再加上編譯器的語法限制,理論上將得到接近100%的正確率。

當然,這兩種情況哪個更好我還很難判斷,也許更好的辦法是它們的結合,至於如何結合,如何去實際操作,就都有待進一步的研究了。

需要說明的是,這裡所說的編譯器並不是指真正的c語言編譯器,因為真正的編譯器要求太嚴格了,比如前面的程式可能只是某個大程式中的一部分,作為全域性變數的a它的宣告就不出現在這裡,要把這樣的程式送去給編譯器除了一堆error還能得到什麼呢,這裡真正需要的只是乙個比編譯器寬鬆很多的「語法檢查器」,只要能檢查出所識別出的結果是否滿足語法就可以了。

模式識別與機器學習(2)

參考部落格 隨機梯度下降 clear all x load ex2data ex2x.dat y load ex2data ex2y.dat x 1.15 1.9 3.06 4.66 6.84 7.95 10,14,16 x power x,0.5 y power x,0.5 m length y ...

模式識別與機器學習(4)

講了推理,以及主要收穫為,原來是對損失函式求導。不過公式不是很對,因為 clear x load ex4data ex4x.dat y load ex4data ex4y.dat m,n size x x ones m,1 x figure pos find y neg find y 0 plot ...

模式識別與機器學習(5)

clear x load ex5data ex5linx.dat y load ex5data ex5liny.dat x load linear regression ex2data ex2x.dat y load linear regression ex2data ex2y.dat plot x...