版權申明:本文為博主窗戶(Colin Cai)原創,歡迎轉帖。如要轉貼,必須注明原文網址 http://www.cnblogs.com/Colin-Cai/p/7881317.html 作者:窗戶 QQ:6679072 E-mail:6679072@qq.com
在一個很老的群里聊天,群里就那么二十幾個人,都是搞這行的,在網上認識了十幾年。一人是某大型電子地圖公司出來的,說,”地圖里面人工智能不就是用初中的概率論搞起來的,誰拿到數據誰都可以搞定“……初中的概率論,聽到覺得真的非常的刺耳,於是就在群里爭了幾句。
回頭來想想,在信息技術領域里,難道數學真的變成了這么低的門檻的東西?再或許,我真的是out了,這些年的執着變得分文不值?可能是因為自己有些偏執,想起以前的時候學習計算機,雖然專業並不是計算機,但依然是一板一眼,一上來是從c語言匯編語言這樣的語言開始搞起,數據結構、編譯原理、操作系統原理、數據庫原理、計算機原理等,過程中潛意識中意識到數學的作用,仿佛所有的計算機知識都可以被形式化。
准確的說,計算機應該屬於工科的東西,有很多工程的性質。如同別的工科工程一樣,很多時候因為一些具體業務的需求會有一些用到初等數學的小竅門。打個比方,從時間0開始,兩個任務,一個3分鍾執行一次,一個5分鍾執行一次,那么兩個在那些分鍾點上,兩個任務都執行?如果是三個任務呢?於是突然有一天來了更復雜的問題,已知a,b互質數,找一個c,使得ac除以b余1,結果可能就不會做了。那么,為什么不稍微系統的學一下數論呢?設計算法的時候,可能設計了一個頻繁使用的平均復雜度為O(logn)的算法,感覺很滿意,可是運行的好好的,突然程序運行偶爾會很不順暢,原來該算法的最高時間復雜度是O(n)。那么,為什么不系統的學學復雜度的計算呢?感到最煩的就是某些可能是初學者,會問為什么什么什么算法沒有什么什么語言的描述之類的問題。我們學習算法學習的是神,而不是型,你學得算法的內涵之后,應該很容易就可以用你熟悉的語法寫出來,可是很多人不明白這一點。
機器學習里最簡單的KNN算法,每個學習過的人真的認真去想過嗎?KNN的每個維度如何做到公平這個問題,如果書本或者別人不告訴你的情況下,你自己是否會想到如何變的公平?直方圖的意義在什么地方?歸一化呢?KNN是很簡單,可是你會不會想到如何在很多很多的樣本中,盡量快速的找到前k個最近的值?我相信,很多人沒有想過,乃至書上不會說自己也就永遠不會去想。當然,我們的庫、我們的工具可能很多地方是很好,讓你不用去思考某些細節。所以,我們的研發很多時候只是在那里調節一些老外的參數而已,卻很少想着去真正理解它,然后再此基礎上改進甚至否定。
工程兩個字很多時候給人一些誤解,認為對於某些問題我們只要反復的去試就行了,可實際上是,如果有深入的理論指導,很可能事半功倍,何止事半功倍。有時候想,是什么讓人浮躁,是我們的收入使然,還是千變萬化而又快速取代的信息技術?或許一切都不是原罪,而只有自己的心。
我一向覺得,數學很重要,我們的軟件工程師大多數數學學的太少,即便有的學了一些,可是依然不想着得其髓。再回到之前的概率論,搞AI的確是需要概率論這樣的數學基礎的,但是概率論真的很容易嗎?我看不見得,當年我們學的時候,感覺是很難的,那一大堆的證明很頭疼啊,比如有多少種極限的方式可以得到正太分布?甚至於建立概率空間的Sigma代數都不是那么平易近人。當然,你會反駁,我們是工程師,我們只需要知道怎么使用嘛那么復雜的概率論底層我們憑什么要深入了解。是的,我們甚至可能只需要知道條件概率怎么算,知道貝葉斯公式就OK了。可是,永遠不要忘了,如果你站在更高的地方,你的思路會變得更廣闊。所有上了大學接觸到高等數學的學生可能都不會再覺得高中數學過於困難,那就是因為你上到了一個新的台階。不需要每個人都像數學系那樣深度的去學數學,可是,還是需要深入的想一想。
我還是建議每個人從數學的角度去看看編譯原理,或許可以看到一個不一樣的世界,我也希望每個人都可以嘗試着用lisp去勾畫,好好理解理解lisp的思想,如果所有都是為了實用而實用,思想會禁錮。
一直遇到一些浮躁的剛畢業大學生,甚至工作了有一定年份的人也有類似的想法。但我的思維可能還是那么古板,也許真是我多想了,不是人們浮躁了,而是世界變的快。