信息技術領域,我們如何進行算法創新?

一直以來,我都想寫一篇信息技術領域該如何進行算法創新的文章。算法是芯片、操作系統乃至整個信息系統的基礎,我國是信息技術應用大國,算法的研究在我國卻及其薄弱。時至今日,我國還在被國外技術封鎖、核心技術卡脖子,而算法創新才能實現信息系統的創新,才能實現操作系統的創新,才能實現行業應用方法的創新。

基於如此急迫的環境,很多學者認爲算法創新是數學家們的事,而數學家又不全具備信息技術知識,更不知道哪些應用環境需要算法,需要什麼樣的算法。程序員或系統架構師又過於偏向應用,拿來主義比較嚴重。在我國,就算能實現算法創新,卻應用壁壘非常高,有些需要形成標準,有些需要形成生態。所以我國算法創新現狀就是:

“出成果難,應用更難”

所以編寫本文的目的:一方面是通過分享我的研究與市場應用經歷,得出算法創新並不難,也並不是需要博士、教授、院士才能創造,他們也是因爲創造而獲得了該有的榮譽,因爲發表論文不能證明技術可用,可用的技術根本無需發表論文,應當進行知識產權保護。另一方面是通過分析,希望具備審批、評審權力的專家權威們,以及各大巨頭企業們不能再固步自封和技術化緣了!再不開放姿態接納國產技術,且共同分享成果,共同打造生態和標準,我國將永遠無法形成自主可控的核心技術或標準。而且,現在已經不是單打獨鬥的時代,也不能因小公司或個人有一點新東西就被收購、納入或侵吞,生態不是一個企業、一個人打造出來的。

文中我想從下面幾個方面進行說明:

1、算法的作用。什麼是算法?算法在信息系統中的重要性有哪些?

2、數學是算法的基礎。目前都用到了哪些數學理論?哪些算法助推了數學理論的深挖?

3、算法功能分類。算法按功能劃分有壓縮、加密、檢錯、糾錯、分析、學習、管理等。

4、創新算法的目的。創新的目的無非是:提升效率、降低能耗、增加功能、提升可信度、增強魯棒性、降低實現難度等。

5、算法創新的方法。通過舉例如何從一個基本點拓展到一個優質的算法。

一、算法的作用

信息系統中,算法是極爲重要的支柱性存在。算法是芯片、系統和IT行業的靈魂。芯片是實現算法邏輯的微電子電路;系統是算法功能的集合。下面舉幾個常見的應用領域及其所涉及的算法。

操作系統:作業調度算法、進程調度算法、銀行家算法、頁面置換算法、磁盤調度算法等等,這些基礎算法實現了Windows、Linux(安卓、麒麟等)、Unix(IOS、蘋果)系統。

通信系統:檢錯糾錯算法,調度算法,甚至3G/4G/5G中碼分多址、時分多址、頻分多址,應用協議算法等。

文件系統:JPG、MP3、MP4等文件類型核心是變換算法和壓縮算法。

加密系統:AES、DES、RSA等對稱、非對稱加密算法;MD5、SHA等哈希算法。

這些算法早已經應用於生活中的方方面面,比如數碼相機拍照保存的Jpg照片;拍視頻、電影、視頻電話採用的MP4、RMVB等格式;音樂採用MP3、wav等格式;日常電話、短信使用的3G/4G/5G技術;藍牙、WiFi、NFC功能;USB接口的存儲設備(U盤、硬盤);導航、定位使用了衛星通信;支付寶、微信支付、銀行系統中的加密系統。舉不勝舉。

二、數學是算法的基礎

這裏通過幾個應用領域的算法來舉例說明。

(1)JPG圖片格式

JPG圖片格式中主要應用了三個算法:DCT(離散餘弦變換)、預測編碼、哈夫曼編碼。

離散餘弦變換:是與傅里葉變換相關的一種變換,它類似於離散傅里葉變換(DFT for Discrete Fourier Transform),但是隻使用實數。離散餘弦變換相當於一個長度大概是它兩倍的離散傅里葉變換,這個離散傅里葉變換是對一個實偶函數進行的(因爲一個實偶函數的傅里葉變換仍然是一個實偶函數),在有些變形裏面需要將輸入或者輸出的位置移動半個單位(DCT有8種標準類型,其中4種是常見的)。傅里葉變換的數學基礎是三角函數和積分。

預測編碼:預測一般比較簡單,就是代數運算中的加減乘除。

哈夫曼編碼:是信息論提出以來,基於最優二叉樹的熵編碼算法;而信息論的數學基礎是概率論和隨機過程。

也就是說構建JPG算法的數學基礎有:代數、三角函數、積分和概率論。所以,如果只進行理論研究的數學家,無法廣泛的將各類理論進行綜合應用;而作爲技術研發人員,不具備這些數學基礎將無法實現算法創新。

(2)5G通信技術中的“極化碼

5G通信馬上要全面應用,作爲5G通信標準中核心算法之一的極化碼算法(另一個爲LDPC算法),其目的是解決數據在無線電傳輸過程中的錯誤問題,降低了重傳率。直接表象是:用戶感覺網速穩定,傳輸很快,不再卡頓。

構造的核心是通過信道極化(channel polarization)處理,在編碼側採用方法使各個子信道呈現出不同的可靠性,當碼長持續增加時,部分信道將趨向於容量近於1的完美信道(無誤碼),另一部分信道趨向於容量接近於0的純噪聲信道,選擇在容量接近於1的信道上直接傳輸信息以逼近信道容量,是目前唯一能夠被嚴格證明可以達到香農極限的方法。

顯然,極化碼類的信道檢錯糾錯算法,其構造方式可以是代數、概率,其理論支持是信息論。檢錯糾錯算法全球只有十幾個比如奇偶校驗(LDPC)、循環冗餘、BCH、海明碼、卷積碼(渦輪碼 Turbo code)、極化碼等,每一算法都基於數學。3G時代採用了Turbo code,與該碼有關的技術創新專利高達幾十萬個。

(3)銀行密碼、安全驗證中的MD5算法

MD5信息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16字節)的散列值(hash value),用於確保信息傳輸完整一致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,於1992年公開,用以取代MD4算法。這套算法的程序在 RFC 1321 標準中被加以規範。1996年後該算法被證實存在弱點,可以被加以破解,對於需要高度安全性的數據,專家一般建議改用其他算法,如SHA-2。2004年,證實MD5算法無法防止碰撞(collision),因此不適用於安全性認證,如SSL公開密鑰認證或是數字簽名等用途。

我國加密標準SM3,也是散列算法的一種,而其數學基礎是代數運算。

三、算法功能分類

(1)壓縮算法

壓縮分爲有損和無損,有損主要用於圖像、視頻、音頻等視覺,聽覺類的數據壓縮,目前市面上主要是一些通過一些方法先對人類不感興趣的部分進行處理,然後對剩下的數據進行無損壓縮。比如:在文字方面,按照中文定義的修飾語、定語之類的對理解語句並不存在大的影響的,可以先去除,把主謂賓相對重要的信息保留,然後進行無損壓縮。針對圖像來講,頻率高的數據人眼是不敏感的(比如小時候晃動香火,很快時成爲了一個圈或線),所以,反過來可以認爲圖像中顏色相同的地方是高頻部分。於是DCT、傅里葉變換、小波變換、部分預測編碼就是針對頻率區分的算法,適當捨棄高頻數據、重點保留低頻數據,再將剩下的數據進行無損壓縮。這樣可以保留圖像的視覺效果,同時具有很高的壓縮率。

無損壓縮主要是針對數據壓縮,並且解壓後任何數據(字節、比特)均可無損還原。1948年香濃用概率理論給出了信息熵的概念,於是無損壓縮就具有了壓縮的理論極限。無損壓縮算法有香濃費諾碼、哈夫曼編碼、算術編碼、行程編碼、字典編碼等。

(2)加密

加密分爲對稱加密、非對稱加密、授密與簽名等算法。國內有SM系列算法,國外有DES、AES、RSA等算法,有MD5、SHA(美國國家安全局設計發佈)等信息摘要算法。比如百度官網(淘寶、支付寶、騰訊等等)的簽名算法如下圖:

百度採用SHA256簽名算法

該證書由GlobalSign簽發,該公司是一個具有很高可信度並且發展良好的證書管理機構和SSL 提供商,美國公司。

(3)檢錯算法

檢錯算法主要用於通信和數據文件驗證,比如奇偶校驗碼、CRC(循環冗餘碼)等,該類碼不一定會具有糾錯能力,主要目的是爲了發現錯誤。比如5G通信中,極化碼一般會使用CRC來校驗傳輸後的數據正確性。檢錯算法冗餘度一般比較低,所以在一些相對比較優質的信道中使用,比如光纖通信、有線或同軸電纜等領域。

(4)糾錯算法

檢錯算法主要用於通信領域,比如衛星通信、無線電通信等信號衰變比較大、且干擾多的通信領域。比如5G通信中的極化碼(差錯控制碼)、LDPC等,目前國內也開展海洋通信技術,深空通信技術,甚至量子通信等都需要優越的糾錯算法,使得數據得以可靠傳輸,因爲沒有絕對不受干擾或絕對無誤的物理傳輸信道和設備。

(5)分析

數據分析類算法具有很多,比如離散數據分析的遺傳算法、粒子羣算法;又比如針對圖像識別的snake、四叉樹、主成分分析、等高線等算法;還有針對經濟數據和股票分析的模型也是算法。這類算法主要爲提取有用的信息而設計開發。

(6)學習

學習算法目前比較熱門,主要是讓數學模型能完全或半自我修正的算法,通過學習得到與人類有關的、所需要的、能被認知的信息結果。目前BP、MP、網絡神經算法等。但目前所有的學習算法僅僅是在分析算法上提升得到的算法。例如語音識別、圖像識別主要還是提取大量的樣本數據,進行一定程度上的模糊比對後得出對應的結果。

(7)管理

這裏介紹的管理算法是一個大概念,比如人類社會中,人需要遵從的法律、道德都可以被理解爲設計出來的算法。比如,計算機操作系統中的內存、設備管理方法,調度方法,數據結構和文件類型定義等等都是屬於管理類算法。

上面例舉了一小部分類型,感興趣的朋友可以思考其他的場景。

三、創新算法的目的

創新的目的無非是:提升效率、降低能耗、增加功能、提升可信度、增強魯棒性、降低實現難度等。比如壓縮算法可以從三個方面來提升都是屬於算法創新:

(1)方法創新,如行程編碼、字典編碼、哈夫曼編碼、算術編碼具有不同的方法,這條路比較艱難,屬於核心算法理論創新。自信息論確立(1948年)以來全世界核心的算法理論就幾個而已。

(2)效率創新,這個相對簡單,比如算術編碼和區間編碼,就從一個小數運算演變成整數運算,使得效率增加;又比如我發明的加權概率模型算法,可以利用概率權係數針對一個或多個符號進行同步編碼,也是屬於效率增加類型。

(3)增加算法功能,前面我們討論的是一個算法僅實現一個功能,而通過修改算法流程或方式,讓一個算法同時實現壓縮或加密,於是可以解決算法硬件化的成本,提升算法應用面。

(4)降低算法步驟,這個主要針對性能優化來講的,能通過最少的步驟實現同樣的功能,這本就是創新。

四、算法創新的方法

算法創新的方法是本文重點討論的核心,瞭解算法的人很多,但是真正知道如何創新算法的人很少。然後我將基於不同的算法,結合我本人的經驗給出一些創新的思路。希望未來,我國湧現出一批算法創新人才和專利技術。

這裏我通過人臉識別和多麥陣列算法來舉例,比如最初始的人臉捕捉(定位)算法。

首先,選擇一個合理的分析環境和方法。給定一張人臉圖或含有人臉的圖,有可能是RGB或YUV顏色模式,以YUV爲基礎,Y可以代表着當前圖像的黑白模式(到底是選擇Y還是R、G、B可以考慮不同的場景來進行分析)。然後人臉一般可以被囊括在一個多邊形的塊域內,但是這個塊域的中心在哪?塊域大小如何確定?是首先應當提出來的問題。

第二,人臉有哪些特徵?就是分析人臉在圖像中的特徵,如果白天拍攝的照片,顯然對於人臉來講,在黑白情況下只有頭髮、眼睛、鼻孔或口會呈現出黑色,當然有可能穿了黑色的衣服等。

第三,如何排除非人臉?人類固有的臉部特徵是頭髮、眼睛、鼻孔、口的間距是有一定的參考特徵範圍的,於是就可以排除黑色衣服、包、或其他黑色的物件等。區分人臉還是其他動物的臉?就需要增加一切其他的只有人臉纔有的特徵參數,比如臉部除了鬍子、黑痣以外不存在更接近黑色的色塊,而且鬍子的位置是相對已知的;如何不做具有胎記的人臉?胎記有很多形狀,也存在很多的顏色可能,如何解決這個問題呢?解決辦法可以設定場景內只允許出現人(這個是目前國內安檢的主要做法)或者利用半臉複製的方法,如果半臉複製去除有胎記的色塊,並判斷眼、鼻間距相似則可以認定爲是一個人臉。值得注意的是:分析並列出所有的可能性,針對每一種可能性尋找事務最基本的本質作爲算法因子,如果是一些表象,則無法實現優質算法。

第四,如何獲取圖像遠近中的人臉?又如何獲取側面的人臉?因爲塊域的大小和攝像頭所在的位置、輸出圖像的尺寸存在關聯,所以需要確定一些因數後再考慮通過眼、鼻、口來定位塊域的中心位置。那又如何在一張圖中捕捉多個人臉,且人臉的大小和遮擋也是不一樣的。這裏需要的還是去分析本質。首先遠近對應的主要是人臉的大小和模糊程度,側臉就不一樣了需要得到眼、鼻、口的曲線關係纔是臉的本質,耳朵和帽子、眼睛只能作爲不重要的輔助因數。或者(大)半臉的矩陣變換(旋轉、扭曲)關係纔是本質。

第五,如何提升捕捉率?這裏涉及的主要是遍歷方法和攝像頭的位置、圖像採集尺寸、以及塊域的初始大小。當確定這些參數,可以分爲主掃描和多個輔掃描來提升人臉確定效率和遍歷效率。即第一次用最大的塊域和最小的塊域作爲窗口,每次向左下角移動一像素然後分析當前的塊內是不是一個人臉(可以多方向同時進行掃描);也可以根據圖像的特點和場景,用一個可縮的窗口不斷的縮小;可以利用圖像顏色和明亮度,得出臉部塊的基本數值類型,然後利用四叉樹、等高線、snake算法找出人臉的邊界。

第六,如何進行識別?由於每次分析的都是事務的本質,所以這些本質同時也能代表某個特定人的生物標識。所以可以適當的在不同的光線和尺寸下,改變矩陣變換參數,利用本質信息進行一定程度的模糊識別不存在問題。

顯然,一個簡單的人臉識別算法,所涉及的內容巨大的,所能產生的不同創新也是不一樣的,當然這裏需要具有基礎的數學功底,知道矩陣變換、三角函數等基礎數學理論。我的方法是先分析問題,然後找數學方法,通過實驗找出最優的實現方式和公式。因爲移動就涉及向量運算,鈕動和縮方涉及矩陣運算,其他的還有求平均值,方差,三角函數和一些數據結構方面的知識,比如二叉樹、四叉樹等。原則是:

“分析問題的本質,構建最少參數的表達式”

(後續我將逐步描述檢錯糾錯、加密、壓縮等算法創新方法)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章