㈠ 人工智慧時代,神經網路的原理及使用方法 | 微課堂
人工智慧時代已經悄然來臨,在計算機技術高速發展的未來,機器是否能代替人腦?也許有些讀者會說,永遠不可能,因為散盯扮人腦的思考包含感性邏輯。事實上,神經網路演算法正是在模仿人腦的思考方式。想不想知道神經網路是如何「思考」的呢?下面我向大家簡單介紹一下神經網路的原理及使用方法。
所謂人工智慧,就是讓機器具備人的思維和意識。人工智慧主要有三個學派——行為主義、符號主義和連接主義。
行為主義是基於控制論,是在構建感知動作的控制系統。理解行為主義有個很好的例子,就是讓機器人單腳站立,通過感知要摔倒的方向控制兩只手的動作,保持身體的平衡,這就構建了一個感知動作控制系統。
符號主義是基於算數邏輯和表達式。求解問題時,先把問題描述為表達式,再求解表達式。如果你在求解某個問題時,可以用if case這樣的條件語句,和若干計算公式描述出來,這就使用了符號主義的方法,比如「專家系統」。符號主義可以認為是用公式描述的人工智慧,它讓計算機具備了理性思維。但是人類不僅具備理性思維,還具備無法用公式描述的感性思維。比如,如果你看過這篇推送,下回再見到「符號主義」幾個字,你會覺得眼熟,會想到這是人工智慧相關的知識,這是人的直覺,是感性的。
連接主義就是在模擬人的這種感性思維,是在仿造人腦內的神經元連接關系。這張圖給出了人腦中的一根神經元,左側是神經元的輸入,「軸突」部分是神經元的輸出。人腦就是由860億個這樣的神經元首尾相接組成的網路。
神經網路可以讓計算機具備感性思維。我們首先理解一下基於連接主義的神經網路設計過程。這張圖給出了人類從出生到24個月神經網路的變化:
隨著我們的成長,大量的數據通過視覺、聽覺湧入大腦,使我們的神經網路連接,也就是這些神經元連線上的權重發生了變化,有些線上的權重增強了,有些線上的權重減弱了。
我們要用計算機仿出這些神經網路連接關系,讓計算機具備感性思維。
首先需要准備數據,數據量越大越好,以構成特徵和標簽對。如果想識別貓,就要有大量貓的圖片和這張圖片是貓的標簽構成特徵標簽對,然後搭建神經網路的網路結構,再通過反向傳播優化連接的權重,直到模型的識別准確率達到要求,得到最優的連線權重,把這個模型保存起來。最後用保存的模型輸入從未見過的新數據,它會通過前向傳播輸出概率值,概率值最大的一個就是分類和預測的結果。
我們舉個例子來感受一下神經網路的設計過程。鳶尾花可以分為三類:狗尾鳶尾、雜色鳶尾和佛吉尼亞鳶尾。我們拿出一張圖,需要讓計算機判斷這是哪類鳶尾花。人們通過經驗總結出了規律:通過測量花的花萼長、花萼寬、花瓣長、花瓣寬分辨出鳶尾花的類別,比如花萼長>花萼寬,並且花瓣長/花瓣寬>2,則可以判定為這是第一種,雜色鳶尾。看到這里,也許有些讀者已經想到用if、case這樣的條件語句來實現鳶尾花的分類。沒錯,條件語句根據這些信息可以判斷鳶尾花分類,這是一個非常典型的專家系統,這個過程是理性計算。只要有了這些數據,就可以通過條件判定公式計算出是哪類鳶尾花。但是我們發現鳶尾花的種植者在識別鳶尾花的時候並不需要這么理性的計算,因為他們見識了太多的鳶尾花,一看就知道是哪種,而且隨著經驗的增加,識別的准確率會提高。這就是直覺,是感性思維,也是我們這篇文章想要和大家分享的神經網路方法。
這種神經網路設計過程首先需要採集大量的花萼長、花萼寬、花瓣長、花瓣寬,和它們所對應的是哪種鳶尾花。花萼長、花萼寬、花瓣長、花瓣寬叫做輸入特徵,它們對應的分類叫做標簽。大量的輸入特徵和標簽對構建出數據集,再把這個數據集喂入搭建好的神經網路結構,網路通過反向傳播優化參數,得到模型。當有新的、從未見過的輸入特徵,送入神經網路時,神經網路會輸出識別的結果。
展望21世紀初,在近十年神經網路理論研究趨向的背景下,神經網路理論的主要前沿領域包括:
一、對智能和機器關系問題的認識進一步增長。
研究人類智力一直是科學發展中最有意義,也是空前困難的挑沖灶戰性問題。人腦是我們所知道的唯一則帶智能系統,具有感知識別、學習、聯想、記憶、推理等智能。我們通過不斷 探索 人類智能的本質以及聯結機制,並用人工系統復現或部分復現,製造各種智能機器,這樣可使人類有更多的時間和機會從事更為復雜、更富創造性的工作。
神經網路是由大量處理單元組成的非線性、自適應、自組織系統,是在現代神經科學研究成果的基礎上提出的,試圖模擬神經網路加工、記憶信息的方式,設計一種新的機器,使之具有人腦風格的信息處理能力。智能理論所面對的課題來自「環境——問題——目的」,有極大的誘惑力與壓力,它的發展方向將是把基於連接主義的神經網路理論、基於符號主義的人工智慧專家系統理論和基於進化論的人工生命這三大研究領域,在共同追求的總目標下,自發而有機地結合起來。
二、神經計算和進化計算的重大發展。
計算和演算法是人類自古以來十分重視的研究領域,本世紀30年代,符號邏輯方面的研究非常活躍。近年來,神經計算和進化計算領域很活躍,有新的發展動向,在從系統層次向細胞層次轉化里,正在建立數學理論基礎。隨著人們不斷 探索 新的計算和演算法,將推動計算理論向計算智能化方向發展,在21世紀人類將全面進入信息 社會 ,對信息的獲取、處理和傳輸問題,對網路路由優化問題,對數據安全和保密問題等等將有新的要求,這些將成為 社會 運行的首要任務。因此,神經計算和進化計算與高速信息網路理論聯系將更加密切,並在計算機網路領域中發揮巨大的作用,例如大范圍計算機網路的自組織功能實現就要進行進化計算。
人類的思維方式正在轉變,從線性思維轉到非線性思維神經元,神經網路都有非線性、非局域性、非定常性、非凸性和混沌等特性。我們在計算智能的層次上研究非線性動力系統、混沌神經網路以及對神經網路的數理研究,進一步研究自適應性子波、非線性神經場的興奮模式、神經集團的宏觀力學等。因為,非線性問題的研究是神經網路理論發展的一個最大動力,也是它面臨的最大挑戰。
以上就是有關神經網路的相關內容,希望能為讀者帶來幫助。
以上內容由蘇州空天信息研究院謝雨宏提供。
㈡ SPSS統計分析案例:多層感知器神經網路
SPSS統計分析案例:多層感知器神經網路
神經網路模型起源於對人類大腦思維模式的研究,它是一個非線性的數據建模工具, 由輸入層和輸出層、 一個或者多個隱藏層構成神經元,神經元之間的連接賦予相關的權重, 訓練學習演算法在迭代過程中不斷調整這些權重,從而使得預測誤差最小化並給出預測精度。
在SPSS神經網路中,包括多層感知器(MLP)和徑向基函數(RBF)兩種方法。
本期主要學習多層感知器神經網路,要把它講清楚是比較困難的,為了能直觀感受它的功能,首先以一個案例開始,最後再總結知識。
案例數據
該數據文件涉及某銀行在降低貸款拖欠率方面的舉措。該文件包含 700 位過去曾獲得貸款的客戶財務和人口統計信息。請使用這 700 名客戶的隨機樣本創建多層感知器神經網路模型。銀行需要此模型對新的客戶數據按高或低信用風險對他們進行分類。
第一次分析:菜單參數
要運行「多層感知器」分析,請從菜單中選擇:
分析 > 神經網路 > 多層感知器
如上圖所示,MLP主面板共有8個選項卡,至少需要設置其中"變數"、"分區"、"輸出"、"保存"、"導出"等5個選項卡,其他接受軟體默認設置。
▌ "變數"選項卡
將"是否拖欠"移入因變數框;
將分類變數"學歷"移入因子框,其他數值變數移入"協變數"框;
因各協變數量綱不同,選擇"標准化"處理;
▌ "分區"選項卡
在此之前,首先在 "轉換 > 隨機數生成器"菜單中設置隨機數固定種子為9191972(此處同SPSS官方文檔,用戶可以自由設定),因為"分區"選項卡中,要求對原始數據文件進行隨機化抽樣,將數據劃分為"訓練樣本"、"支持樣本"、"檢驗樣本"3個區塊,為了隨機過程可重復,所以此處指定固定種子一枚;
初次建模,先抽樣70%作為訓練樣本,用於完成自學習構建神經網路模型,30%作為支持樣本,用於評估所建立模型的性能,暫不分配檢驗樣本;
▌ "輸出"選項卡
勾選"描述"、"圖";
勾選"模型摘要"、"分類結果"、"預測實測圖";
勾選"個案處理摘要";
構成"自變數重要性分析";
這是第一次嘗試性的分析,主要參數設置如上,其他選項卡接受軟體默認設置,最後返回主面板,點擊"確定"按鈕,軟體開始執行MLP過程。
第一次分析產生的結果:
主要看重點的結果,依次如下:
個案處理摘要表,700個貸款客戶的記錄,其中480個客戶被分配到訓練樣本,佔比68.6%,另外220個客戶分配為支持樣本。
模型摘要表,首次構建的MLP神經網路模型其不正確預測百分比為12.7%,獨立的支持樣本檢驗模型的不正確百分比為20.9%,提示"超出最大時程數",模型非正常規則中止,顯示有過度學習的嫌疑。
判斷:首次建立的模型需要預防過度訓練。
第二次分析:菜單參數
首次分析懷疑訓練過度,所以第二次分析主要是新增檢驗樣本以及輸出最終的模型結果。
運行「多層感知器」分析,請從菜單中選擇:
分析 > 神經網路 > 多層感知器
▌ "分區"選項卡
對樣本進行重新分配,總700樣本,支持樣本繼續30%,訓練樣本由原來的70%縮減至50%,另外的20%分配給獨立的檢驗樣本空間;
▌ "保存"選項卡
保存每個因變數的預測值或類別;
保存每個因變數的預測擬概率;
▌ "導出"選項卡
將突觸權重估算值導出到XML文件;
給XML模型文件起名並制定存放路徑;
其他選項卡的操作和第一次分析保持一致。返回主面板,點擊"確定"開始執行第二次分析。
第一次分析產生的結果:
總樣本在3個分區的分配比例。
MLP神經網路圖,模型包括1個輸入層、1個隱藏層和1個輸出層,輸入層神經元個數12個,隱藏層9個,輸出層2個。
模型摘要表,模型誤差在1個連續步驟中未出現優化減少現象,模型按預定中止。模型在3個分區中的不正確預測百分比較接近。
模型分類表,軟體默認採用0.5作為正確和錯誤的概率分界,將3大分區樣本的正確率進行交叉對比,顯示出預測為NO,即預測為不拖欠的概率高於拖欠,模型對有拖欠的貸款客戶風險識別能力較低。
預測-實測圖,按照貸款客戶是否拖欠與預測結果進行分組,縱坐標為預測概率。以0.5為分界時,對優質客戶的識別效果較好,但是有較大的概率在識別有拖欠客戶上出錯。
顯然以0.5作為分界並不是最優解,可以嘗試將分界下移至0.3左右,此操作會使第四個箱圖中大量欠貸客戶正確地重新分類為欠貸者,提高風險識別能力。
自變數重要性圖,重要性圖為重要性表格中值的條形圖,以重要性值降序排序。其顯示與客戶穩定性(employ、address)和負債(creddebt、debtinc)相關的變數對於網路如何對客戶進行分類有重大影響;
最後來看導出的XML模型文件:
以XML文件存儲了第二次構建的MLP神經網路模型,可以用於新客戶的分類和風險識別。
新客戶分類
假設現在有150名新客戶,現在需要採用此前建立的模型,對這些客戶進行快速的風險分類和識別。
打開新客戶數據,菜單中選擇:
實用程序 > 評分向導
型"XML文件,點擊"下一步":
檢查新數據文件變數的定義是否准確。下一步。
選擇輸出"預測類別的概率"、"預測值"。完成。
新客戶數據文件新增3列,分別給出每一個新客戶的預測概率和風險分類(是否欠貸)。
多層感知器神經網路 總結
一種前饋式有監督的學習技術;
多層感知器可以發現極為復雜的關系;
如果因變數是分類型,神經網路會根據輸入數據,將記錄劃分為最適合的類別;
如果因變數是連續型,神將網路預測的連續值是輸入數據的某個連續函數;
建議創建訓練-檢驗-支持三個分區,網路訓練學習將更有效;
可將模型導出成 XML 格式對新的數據進行打分;
㈢ 一文讀懂神經網路
要說近幾年最引人注目的技術,無疑的,非人工智慧莫屬。無論你是否身處科技互聯網行業,隨處可見人工智慧的身影:從 AlphaGo 擊敗世界圍棋冠軍,到無人駕駛概念的興起,再到科技巨頭 All in AI,以及各大高校向社會輸送海量的人工智慧專業的畢業生。以至於人們開始萌生一個想法:新的革命就要來了,我們的世界將再次發生一次巨變;而後開始焦慮:我的工作是否會被機器取代?我該如何才能抓住這次革命?
人工智慧背後的核心技術是深度神經網路(Deep Neural Network),大概是一年前這個時候,我正在回老家的高鐵上學習 3Blue1Brown 的 Neural Network 系列視頻課程,短短 4 集 60 多分鍾的時間,就把神經網路從 High Level 到推導細節說得清清楚楚,當時的我除了獲得新知的興奮之外,還有一點新的認知,算是給頭腦中的革命性的技術潑了盆冷水:神經網路可以解決一些復雜的、以前很難通過寫程序來完成的任務——例如圖像、語音識別等,但它的實現機制告訴我,神經網路依然沒有達到生物級別的智能,短期內期待它來取代人也是不可能的。
一年後的今天,依然在這個春運的時間點,將我對神經網路的理解寫下來,算是對這部分知識的一個學習筆記,運氣好的話,還可以讓不了解神經網路的同學了解起來。
維基網路這樣解釋 神經網路 :
這個定義比較寬泛,你甚至還可以用它來定義其它的機器學習演算法,例如之前我們一起學習的邏輯回歸和 GBDT 決策樹。下面我們具體一點,下圖是一個邏輯回歸的示意圖:
其中 x1 和 x2 表示輸入,w1 和 w2 是模型的參數,z 是一個線性函數:
接著我們對 z 做一個 sigmod 變換(圖中藍色圓),得到輸出 y:
其實,上面的邏輯回歸就可以看成是一個只有 1 層 輸入層 , 1 層 輸出層 的神經網路,圖中容納數字的圈兒被稱作 神經元 ;其中,層與層之間的連接 w1、w2 以及 b,是這個 神經網路的參數 ,層之間如果每個神經元之間都保持著連接,這樣的層被稱為 全連接層 (Full Connection Layer),或 稠密層 (Dense Layer);此外,sigmoid 函數又被稱作 激活函數 (Activation Function),除了 sigmoid 外,常用的激活函數還有 ReLU、tanh 函數等,這些函數都起到將線性函數進行非線性變換的作用。我們還剩下一個重要的概念: 隱藏層 ,它需要把 2 個以上的邏輯回歸疊加起來加以說明:
如上圖所示,除輸入層和輸出層以外,其他的層都叫做 隱藏層 。如果我們多疊加幾層,這個神經網路又可以被稱作 深度神經網路 (Deep Neural Network),有同學可能會問多少層才算「深」呢?這個沒有絕對的定論,個人認為 3 層以上就算吧:)
以上,便是神經網路,以及神經網路中包含的概念,可見,神經網路並不特別,廣義上講,它就是
可見,神經網路和人腦神經也沒有任何關聯,如果我們說起它的另一個名字—— 多層感知機(Mutilayer Perceptron) ,就更不會覺得有多麼玄乎了,多層感知機創造於 80 年代,可為什麼直到 30 年後的今天才爆發呢?你想得沒錯,因為改了個名字……開個玩笑;實際上深度學習這項技術也經歷過很長一段時間的黑暗低谷期,直到人們開始利用 GPU 來極大的提升訓練模型的速度,以及幾個標志性的事件:如 AlphaGo戰勝李世石、Google 開源 TensorFlow 框架等等,感興趣的同學可以翻一下這里的歷史。
就拿上圖中的 3 個邏輯回歸組成的神經網路作為例子,它和普通的邏輯回歸比起來,有什麼優勢呢?我們先來看下單邏輯回歸有什麼劣勢,對於某些情況來說,邏輯回歸可能永遠無法使其分類,如下面數據:
這 4 個樣本畫在坐標系中如下圖所示
因為邏輯回歸的決策邊界(Decision Boundary)是一條直線,所以上圖中的兩個分類,無論你怎麼做,都無法找到一條直線將它們分開,但如果藉助神經網路,就可以做到這一點。
由 3 個邏輯回歸組成的網路(這里先忽略 bias)如下:
觀察整個網路的計算過程,在進入輸出層之前,該網路所做的計算實際上是:
即把輸入先做了一次線性變換(Linear Transformation),得到 [z1, z2] ,再把 [z1, z2] 做了一個非線性變換(sigmoid),得到 [x1', x2'] ,(線性變換的概念可以參考 這個視頻 )。從這里開始,後面的操作就和一個普通的邏輯回歸沒有任何差別了,所以它們的差異在於: 我們的數據在輸入到模型之前,先做了一層特徵變換處理(Feature Transformation,有時又叫做特徵抽取 Feature Extraction),使之前不可能被分類的數據變得可以分類了 。
我們繼續來看下特徵變換的效果,假設 為 ,帶入上述公式,算出 4 個樣本對應的 [x1', x2'] 如下:
再將變換後的 4 個點繪制在坐標系中:
顯然,在做了特徵變換之後,這兩個分類就可以很容易的被一條決策邊界分開了。
所以, 神經網路的優勢在於,它可以幫助我們自動的完成特徵變換或特徵提取 ,尤其對於聲音、圖像等復雜問題,因為在面對這些問題時,人們很難清晰明確的告訴你,哪些特徵是有用的。
在解決特徵變換的同時,神經網路也引入了新的問題,就是我們需要設計各式各樣的網路結構來針對性的應對不同的場景,例如使用卷積神經網路(CNN)來處理圖像、使用長短期記憶網路(LSTM)來處理序列問題、使用生成式對抗網路(GAN)來寫詩和作圖等,就連去年自然語言處理(NLP)中取得突破性進展的 Transformer/Bert 也是一種特定的網路結構。所以, 學好神經網路,對理解其他更高級的網路結構也是有幫助的 。
上面說了,神經網路可以看作一個非線性函數,該函數的參數是連接神經元的所有的 Weights 和 Biases,該函數可以簡寫為 f(W, B) ,以手寫數字識別的任務作為例子:識別 MNIST 數據集 中的數字,數據集(MNIST 數據集是深度學習中的 HelloWorld)包含上萬張不同的人寫的數字圖片,共有 0-9 十種數字,每張圖片為 28*28=784 個像素,我們設計一個這樣的網路來完成該任務:
把該網路函數所具備的屬性補齊:
接下來的問題是,這個函數是如何產生的?這個問題本質上問的是這些參數的值是怎麼確定的。
在機器學習中,有另一個函數 c 來衡量 f 的好壞,c 的參數是一堆數據集,你輸入給 c 一批 Weights 和 Biases,c 輸出 Bad 或 Good,當結果是 Bad 時,你需要繼續調整 f 的 Weights 和 Biases,再次輸入給 c,如此往復,直到 c 給出 Good 為止,這個 c 就是損失函數 Cost Function(或 Loss Function)。在手寫數字識別的列子中,c 可以描述如下:
可見,要完成手寫數字識別任務,只需要調整這 12730 個參數,讓損失函數輸出一個足夠小的值即可,推而廣之,絕大部分神經網路、機器學習的問題,都可以看成是定義損失函數、以及參數調優的問題。
在手寫識別任務中,我們既可以使用交叉熵(Cross Entropy)損失函數,也可以使用 MSE(Mean Squared Error)作為損失函數,接下來,就剩下如何調優參數了。
神經網路的參數調優也沒有使用特別的技術,依然是大家剛接觸機器學習,就學到的梯度下降演算法,梯度下降解決了上面迭代過程中的遺留問題——當損失函數給出 Bad 結果時,如何調整參數,能讓 Loss 減少得最快。
梯度可以理解為:
把 Loss 對應到 H,12730 個參數對應到 (x,y),則 Loss 對所有參數的梯度可以表示為下面向量,該向量的長度為 12730:
$$
abla L(w,b) = left[
frac{partial L}{partial w_1},
frac{partial L}{partial w_2},...,
frac{partial L}{partial b_{26}}
ight] ^ op
$$
所以,每次迭代過程可以概括為
用梯度來調整參數的式子如下(為了簡化,這里省略了 bias):
上式中, 是學習率,意為每次朝下降最快的方向前進一小步,避免優化過頭(Overshoot)。
由於神經網路參數繁多,所以需要更高效的計算梯度的演算法,於是,反向傳播演算法(Backpropagation)呼之欲出。
在學習反向傳播演算法之前,我們先復習一下微積分中的鏈式法則(Chain Rule):設 g = u(h) , h = f(x) 是兩個可導函數,x 的一個很小的變化 △x 會使 h 產生一個很小的變化 △h,從而 g 也產生一個較小的變化 △g,現要求 △g/△x,可以使用鏈式法則:
有了以上基礎,理解反向傳播演算法就簡單了。
假設我們的演示網路只有 2 層,輸入輸出都只有 2 個神經元,如下圖所示:
其中 是輸入, 是輸出, 是樣本的目標值,這里使用的損失函數 L 為 MSE;圖中的上標 (1) 或 (2) 分別表示參數屬於第 (1) 層或第 (2) 層,下標 1 或 2 分別表示該層的第 1 或 第 2 個神經元。
現在我們來計算 和 ,掌握了這 2 個參數的偏導數計算之後,整個梯度的計算就掌握了。
所謂反向傳播演算法,指的是從右向左來計算每個參數的偏導數,先計算 ,根據鏈式法則
對左邊項用鏈式法則展開
又 是輸出值, 可以直接通過 MSE 的導數算出:
而 ,則 就是 sigmoid 函數的導數在 處的值,即
於是 就算出來了:
再來看 這一項,因為
所以
注意:上面式子對於所有的 和 都成立,且結果非常直觀,即 對 的偏導為左邊的輸入 的大小;同時,這里還隱含著另一層意思:需要調整哪個 來影響 ,才能使 Loss 下降得最快,從該式子可以看出,當然是先調整較大的 值所對應的 ,效果才最顯著 。
於是,最後一層參數 的偏導數就算出來了
我們再來算上一層的 ,根據鏈式法則 :
繼續展開左邊這一項
你發現沒有,這幾乎和計算最後一層一摸一樣,但需要注意的是,這里的 對 Loss 造成的影響有多條路徑,於是對於只有 2 個輸出的本例來說:
上式中, 都已經在最後一層算出,下面我們來看下 ,因為
於是
同理
注意:這里也引申出梯度下降的調參直覺:即要使 Loss 下降得最快,優先調整 weight 值比較大的 weight。
至此, 也算出來了
觀察上式, 所謂每個參數的偏導數,通過反向傳播演算法,都可以轉換成線性加權(Weighted Sum)計算 ,歸納如下:
式子中 n 代表分類數,(l) 表示第 l 層,i 表示第 l 層的第 i 個神經元。 既然反向傳播就是一個線性加權,那整個神經網路就可以藉助於 GPU 的矩陣並行計算了 。
最後,當你明白了神經網路的原理,是不是越發的認為,它就是在做一堆的微積分運算,當然,作為能證明一個人是否學過微積分,神經網路還是值得學一下的。Just kidding ..
本文我們通過
這四點,全面的學習了神經網路這個知識點,希望本文能給你帶來幫助。
參考: