『壹』 如何從零開始學編程
在你學習編程之前思考一下你的目標,當你有最終目標時道路會更加的清晰。那麼,你想要寫什麼?網站?游戲?iOS或者Android應用?或是你是想自動化完成一些乏味的任務讓你有更多的時間看窗外的風景?也許你只是想更具有就業競爭力找個好工作。所有的這些都是有價值的目標,這些目標都是你編程學習推動力的一部分,沒有推動力的人,是無法在略顯枯燥的漫長學習之旅中走遠的。
不要浮躁
Badprogrammingiseasy.EvenDummiescanlearnitin21days.,meswithit.
不管是在線下還是線上的書店,滿目都是《21天學通java》這種速成書目,它們都承諾在很短一段時間內就讓你能夠學會相關技術。MatthiasFelleisen在他的著作HowtoDesignPrograms,SecondEdition一書中明確指出了這種「速成」的趨勢並予以了以上的諷刺。
所謂的「捷徑」或者說「銀彈」是不存在的,智者說過,精通某個東西需要10年或10000個小時,也就是漢語中的「十年磨一劍」,所以不用著急,功不唐捐。
培養興趣
ionbythepublic,butbecauseitisfuntoprogram.
_LinusTorvalds
沉醉於編程,編程更是為了興趣。興趣是推動力的不竭源泉,保持這種充滿興趣的感覺,以便於你能將其投入到你的10年/10000小時的編程時間中。編程很有趣,那是探索的喜悅。那是創造的喜悅。看到自己親手完成的作品顯示在屏幕上很有趣。有人為你的代碼而驚嘆很有趣。有人在公共場合稱贊你的產品、鄰居使用你的產品、以及在媒體上討論你的產品很有趣。編程應該十分有趣,若並非如此,就找出導致編程無趣的問題,然後解決之。
在這里對於初學者有兩個大坑:
如果初學者們只與預先構建好的「發動機和組件」接觸(沒有理解和思考它們構造的原理),這會嚴重限制他們在將來構建這些東西的能力,並且在診斷解決問題時無從下手。
第二個坑沒有第一個那麼明顯:幼稚的「整體論」方法有些時候會顯得很有效,這有一定的隱蔽性與誤導性,但是一兩年過後(也許沒那麼長),當你在學習路上走遠時,再想回過頭來「補足基礎」會有巨大的心理障礙,你得拋棄之前自己狹隘的觀念,耐心地緩步前進,這比你初學時學習基礎知識困難得多。
但臘敏茄也不能矯枉過正,陷入還原論的大坑,初學時便一心試圖做宏大的理論,這樣不僅有一切流於理論的危險,枯燥和乏味還會讓你失去推動力。這種情況經常發生在計算機科班生身上。
為了更好理解,可以將學習編程類比為學習廚藝:你為了燒得一手好菜買了一些關於菜譜的書,如果你只是想為家人做菜,這會是一個不錯的主意,你重復菜譜上的步驟也能做出不賴的菜餚,但是如果你有更大的野心,真的想在朋友面前露一手,做一些獨一無二的美味佳餚,甚至成為「大廚」,你必須理解這些菜譜背後大師的想法,理解其中的理論,而不僅僅是一味地實踐。但拿猛是如果你每天唯一的工作就是閱讀那些厚重的理論書籍,因為缺乏實踐,你只會成為一個糟糕的廚子,甚至永遠成為不了廚子,因為看了幾天書後你就因為枯燥放棄了廚藝的學習。
總之,編程是連接理論與實踐的紐帶,是計算機科學與計算機應用技術相交融的領域。正確的編程學習方法應該是:通過自頂而下的探索與項目實踐,獲得編程直覺與推動力;從自底向上的打基礎過程中,獲得最重要的通用方法並鞏固編程思想的理解。
作為初學者,應以後者為主,前者為輪察輔。
啟蒙
「學編程應該學哪門語言?」這經常是初學者問的第一個問題,但這是一個錯誤的問題,你最先考慮的問題應該是「哪些東西構成了編程學習的基礎」?
編程知識的金字塔底部有三個關鍵的部分:
演算法思想:例如怎樣找出一組數中最大的那個數?首先你得有一個maxSoFar變數,之後對於每個數
語法:我怎樣用某種編程語言表達這些演算法,讓計算機能夠理解。
系統基礎:為什麼while(1)時線程永遠無法結束?為什麼int*foo(){intx=0;return&x;}是不可行的?
啟蒙階段的初學者若選擇C語言作為第一門語言會很困難並且枯燥,這是因為他們被迫要同時學習這三個部分,在能做出東西前要花費很多時間。
因此,為了盡量最小化「語法」與「系統基礎」這兩部分,建議使用python作為學習的第一門語言,雖然Python對初學者很友好,但這並不意味著它只是一個「玩具」,在大型項目中你也能見到它強大而靈活的身影。熟悉Python後,學習C語言是便是一個不錯的選擇了:學習C語言會幫助你以靠近底層的視角思考問題,並且在後期幫助你理解操作系統層級的一些原理,如果你只想成為一個普通(平庸)的開發者你可以不學習它。
下面給出了一個可供參考的啟蒙階段導引,完成後你會在頭腦中構建起一個整體框架,幫助你進行自頂向下的探索。
完成Codecademy的Python部分。這只是熱身部分,盡快完成它,因為你永遠只是在瀏覽器里,你不會學到如何搭建開發環境。在Codecademy這類的編程學習網站學到的那點兒東西,哪怕你只想做一個小的不能再小的項目,你都不知道該從哪兒開始。
完成MIT6.00.1x(中文化)(如果你英語不過關,完成麻省理工學院公開課:計算機科學及編程導論。MOOC是學習編程的一個有效途徑。雖然該課程的教學語言為Python,但作為一門優秀的導論課,它強調學習計算機科學領域里的重要概念和範式,而不僅僅是教你特定的語言。如果你不是科班生,這能讓你在自學時開闊眼界;課程內容:計算概念,python編程語言,一些簡單的數據結構與演算法,測試與調試。支線任務:
完成Python核心編程
完成HarvardCS50(如果你英語不過關:完成哈佛大學公開課:計算機科學cs50。同樣是導論課,但這門課與MIT的導論課互補。教學語言涉及C,php,JavaScript+SQL,HTML+CSS,內容的廣度與深度十分合理,還能夠了解到最新的一些科技成果,可以很好激發學習計算機的興趣。支線任務:
閱讀《編碼的奧秘》
完成《C語言編程》
[可選]如果你的目標是成為一名Hacker:閱讀Hacker'sDelight
PS:如果教育對象還是一個孩子,以下的資源會很有幫助:
5-8歲:TurtleAcademy
8-12歲:PythonforKids
12歲以上:MITScratch或KhanAcademy
入門
結束啟蒙階段後,初學者積累了一定的代碼量,對編程也有了一定的了解。這時你可能想去學一門具體的技術,諸如Web開發,Android開發,iOS開發什麼的,你可以去嘗試做一些盡可能簡單的東西,給自己一些正反饋,補充自己的推動力。但記住別深入,這些技術有無數的細節,將來會有時間去學習;同樣的,這時候也別過於深入特定的框架和語言,現在是學習計算機科學通用基礎知識的時候,不要試圖去抄近路直接學你現在想學的東西,這是註定會失敗的。
那麼入門階段具體該做些什麼呢?這時候你需要做的是反思自己曾經寫過的程序,去思考程序為什麼(Why)要這樣設計?,思考怎樣(How)寫出更好的程序?試圖去探尋理解編程的本質:利用計算機解決問題。
設想:
X=用於思考解決方案的時間,即「解決問題」部分
Y=用於實現代碼的時間,即「利用計算機」部分」
編程能力=F(X,Y)(X>Y)
要想提高編程能力,就得優化X,Y與函數F(X,Y),很少有書的內容能同時著重集中在這三點上,但有一本書做到了——(SICP)《計算機程序的構造和解釋》,它為你指明了這三個變數的方向。在閱讀SICP之前,你也許能通過調用幾個函數解決一個簡單問題。但閱讀完SICP之後,你會學會如何將問題抽象並且分解,從而處理更復雜更龐大的問題,這是編程能力巨大的飛躍,這會在本質上改變你思考問題以及用代碼解決問題的方式。此外,SICP的教學語言為Scheme,可以讓你初步了解函數式編程。更重要的是,他的語法十分簡單,你可以很快學會它,從而把更多的時間用於學習書中的編程思想以及復雜問題的解決之道上。
PeterNorvig曾經寫過一篇非常精彩的SICP書評,其中有這樣一段:
Touseananalogy,ifSICPwereaboutautomobiles,,howtheyarebuilt,andhowonemightdesignfuel-efficient,safe,.highway,justlikeeveryoneelse.
如果你是文中的前者,閱讀SICP將成為你銜接啟蒙與入門階段的關鍵點
雖然SICP是一本「入門書」,但對於初學者還是有一定的難度,以下是一些十分有用的輔助資源:
):由上文提到的Google研究主管PeterNorvig主講,教學語言為Python,內容有一定難度。
HowtoDesignPrograms,SecondEdition:HtDP的起點比SICP低,書中的內容循循善誘,對初學者很友好,如果覺得完成SICP過於困難,可以考慮先讀一讀HtDP。
UCBerkeleySICP授課視頻以及SICP的兩位作者給Hewlett-Packard公司員工培訓時的錄像(中文化項目)
ComposingPrograms:一個繼承了SICP思想但使用Python作為教學語言的編程導論(其中包含了一些小項目)
SICP解題集:對於書後的習題,作為初學者應盡力並量力完成。
完成了這部分學習後,你會逐步建立起一個自己的程序設計模型,你的腦子里不再是一團亂麻,你會意識到記住庫和語法並不會教你如何解決編程問題,接下來要學些什麼,在你心裡也會明朗了很多。這時候才是真正開始進行項目實踐,補充推動力的好時機。
關於項目實踐:對於入門階段的初學者,參與開源項目還為時過早,這時候應該開始一些簡單的項目,諸如搭建一個網站並維護它,或是編寫一個小游戲再不斷進行擴展,如果你自己的想法不明確,MegaProjectList中選取項目。總之,務必在這時拿下你項目實踐的第一滴血。
與此同時,別忘了繼續打好根基。為了將來的厚積薄發,在下面這幾個方面你還要繼續做足功課(注意:下面的內容沒有絕對意義上的先後順序):
計算機系統基礎
有了之前程序設計的基礎後,想更加深入地把握計算機科學的脈絡,不妨看看這本書:《深入理解計算機系統》ComputerSystemsAProgrammer'sPerspective。這里點名批評這本書的中譯名,其實根本談不上什麼深入啦,這本書只是CMU的「計算機系統導論」的教材而已。CMU的計算機科學專業相對較偏軟體,該書就是從一個程序員的視角觀察計算機系統,以「程序在計算機中如何執行」為主線,全面闡述計算機系統內部實現的諸多細節。
如果你看書覺得有些枯燥的話,可以跟一門Coursera上的MOOC:TheHardware/SoftwareInterface,這門課的內容是CSAPP的一個子集,但是最經典的實驗部分都移植過來了。同時,可以看看TheCProgrammingLanguage,回顧一下C語言的知識。
完成這本書後,你會具備堅實的系統基礎,也具有了學習操作系統,編譯器,計算機網路等內容的先決條件。當學習更高級的系統內容時,翻閱一下此書的相應章節,同時編程實現其中的例子,一定會對書本上的理論具有更加感性的認識,真正做到經手的代碼,從上層設計到底層實現都瞭然於胸,並能在腦中回放數據在網路->內存->緩存->CPU的流向。
此外,也是時候去接觸UNIX哲學了:KISS-KeepitSimple,Stupid.在實踐中,這意味著你要開始熟悉命令行界面,配置文件。並且在開發中逐漸脫離之前使用的IDE,學會使用Vim或Emacs(或者最好兩者都去嘗試)。
閱讀《UNIX編程環境》
閱讀《UNIX編程藝術》
折騰你的UN*X系統
數據結構與演算法基礎
如今,很多人認為編程(特別是做web開發)的主要部分就是使用別人的代碼,能夠用清晰簡明的方式表達自己的想法比掌握硬核的數學與演算法技巧重要的多,數據結構排序函數二分搜索這不都內置了嗎?工作中永遠用不到,學演算法有啥用啊?這種扛著實用主義大旗的「碼農」思想當然不可取。沒有扎實的理論背景,遭遇瓶頸是遲早的事。
數據結構和演算法是配套的,入門階段你應該掌握的主要內容應該是:這個問題用什麼演算法和數據結構能更快解決。這就要求你對常見的數據結構和演算法了熟於心,你不一定要敲代碼,用紙手寫流程是更快的方式。對你不懂的數據結構和演算法,你要去搜它主要拿來幹嘛的,使用場景是什麼。
供你參考的學習資源:
《演算法導論》:有人說別把這本書當入門書,這本書本來就不是入門書嘛,雖說書名是IntroctiontoAlgorithms,這只不過是因為作者不想把這本書與其他書搞重名罷了。當然,也不是沒辦法拿此書入門,讀第一遍的時候跳過習題和證明就行了嘛,如果還覺得心虛先看看這本《數據結構與演算法分析》
CourseraAlgorithms:DesignandAnalysis[Part1]&[Part2]:Stanford開的演算法課,不限定語言,兩個部分跟下來演算法基礎基本就有了;英語沒過關的:麻省理工學院公開課:演算法導論
入門階段還要注意培養使用常規演算法解決小規模問題的能力,結合前文的SICP部分可以讀讀這幾本書:《編程珠璣》,《程序設計實踐》
編程語言基礎
.,.Additionally,,
-ThePragmaticProgrammer
此外還要知道,學習第n門編程語言的難度是第(n-1)門的一半,所以盡量去嘗試不同的編程語言與編程範式,若你跟尋了前文的指引,你已經接觸了:「干凈」的腳本語言Python,傳統的命令式語言C,以及浪漫的函數式語言Scheme/Racket三個好朋友。但僅僅是接觸遠遠不夠,你還需要不斷繼續加深與他們的友誼,並嘗試結交新朋友,美而雅的Ruby小姑娘,Hindley-Milner語言家族的掌中寶Haskell都是不錯的選擇。但有這么一位你躲不開的,必須得認識的大夥伴—C++,你得做好與他深交的准備:
入門:C++Primer
[可選]進階:
高效使用:EffectiveC++
深入了解:《深度探索C++對象模型》;C++Templates
研究反思:TheDesignandEvolutionofC++;對於C++這個NecessaryEvil,看這本書可以讓你選擇是成為守夜人還是守日人。
現實是殘酷的,在軟體工程領域仍舊充斥著一些狂熱者,他們只掌握著一種編程語言,也只想掌握一種語言,他們認為自己掌握的這門語言是最好的,其他異端都是傻X。這種人也不是無葯可救,有一種很簡單的治療方法:讓他們寫一個編譯器。要想真正理解編程語言,你必須親自實現一個。現在是入門階段,不要求你去上一門編譯器課程,但要求你能至少實現一個簡單的解釋器。
供你參考的學習資源:
《程序設計語言-實踐之路》:CMU編程語言原理的教材,程序語言入門書,現在就可以看,會極大擴展你的眼界,拉開你與普通人的差距。
Coursera編程語言MOOC:課堂上你能接觸到極端FP(函數式)的SML,中性偏FP的Racket,以及極端OOP(面向對象)的Ruby,並學會問題的FP分解vsOOP分解、ML的模式匹配、Lisp宏、不變性與可變性、解釋器的實現原理等,讓你在將來學習新語言時更加輕松並寫出更好的程序。
:熱熱身,教你寫一個簡單的瀏覽器——其實就是一個javascript和html的解釋器,完成後的成品還是很有趣的;接下來,試著完成一個之前在SICP部分提到過的項目:用Python寫一個SchemeInterpreter
其他
編程入門階段比較容易忽視的幾點:
學好英語:英語是你獲取高質量學習資源的主要工具,但在入門階段,所看的那些翻譯書信息損耗也沒那麼嚴重,以你自己情況權衡吧。此外英語的重要性更體現在溝通交流上,LinusTorvalds一個芬蘭人,一口流利的英語一直是他招募開發者為Linux幹活的的法寶,這是你的榜樣。
學會提問:學習中肯定會遇到問題,首先應該學會搜索引擎的「高級搜索」,當單靠檢索無法解決問題時,去StackOverflow或知乎提問,提問前讀讀這篇文章:Whathaveyoutried?
不要做一匹獨狼:嘗試搭建一個像這樣簡單的個人網站,不要只是一個孤零零的About頁面,去學習Markdown與LaTeX,試著在Blog上記錄自己的想法,並訂閱自己喜歡的編程類博客。推薦幾個供你參考:JoelonSoftware,PeterNorvig,CodingHorror
小結
以上的內容你不應該感到懼怕,編程的入門不是幾個星期就能完成的小項目。期間你還會遇到無數的困難,當你碰壁時試著嘗試「費曼」技巧:將難點分而化之,切成小知識塊,再逐個對付,之後通過向別人清楚地解說來檢驗自己是否真的理解。當然,依舊會有你解決不了的問題,這時候不要強迫自己——很多時候當你之後回過頭來再看這個問題時,一切豁然開朗。
此外不要局限與上文提到的那些材料,還有一些值得在入門階段以及將來的提升階段反復閱讀的書籍。ThePragmaticProgrammer就是這樣一本程序員入門書,終極書。有人稱這本書為代碼小全:從DRY到KISS,從做人到做程序員,這本書教給了你一切,你所需的只是遵循書上的指導。
後記
如果你能設法完成以上的所有任務,恭喜你,你已經真正實現了編程入門。這意味著你在之後更深入的學習中,不會畏懼那些學習新語言的任務,不會畏懼那些「復雜」的API,更不會畏懼學習具體的技術,甚至感覺很容易。當然,為了掌握這些東西你依舊需要大量的練習,腰還是會疼,走路還是會費勁,一口氣也上不了5樓。但我能保證你會在思想上有巨大的轉變,獲得極大的自信,看老師同學和csdn的眼光會變得非常微妙,雖然只是完成了編程入門,但已經成為了程序員精神世界的高富帥。不,我說錯了,即使是高富帥也不會有強力精神力,他也會懷疑自己,覺得自己沒錢就什麼都不是了。但總之,你遵循指南好好看書,那就會體驗「會當凌絕頂」的感覺。
首先要想學編程,選一門合適的計算機語言就十分重要了,怎麼去選擇就顯得尤為重要了,這要根據自己的興趣愛好及每個語言的特性來選擇,比如說PHP適合做web開發,易學習,易上手,非常流行的一門計算機語言了,我個人比較推薦php語言。
java可以做web開發,做安卓app開發也用的是java,在學習程度上上可能比php稍微難上手一點,不過也是沒問題的,如果對java感興趣可以嘗試一下。
python是目前比較火的一門語言了,比較適合做人工智慧領域,另外寫網路爬蟲類的程序,用python也是非常合適的了,看個人興趣來選擇了。
c,c++,c#這些語言就不推薦給了,特別是c#,已經是比較過時的一門語言了,即使學習好了,也不太適合去找工作,c與c++並不是十分適合初學者來學習,因此也是沒必要進行考慮了,還有一些更小眾的語言,更是沒有必要去考慮,因此關於語言的學習就從上面3種語言去選擇一門自己所感興趣的吧!
研發搭建環境
如果選擇好計算機語言,那麼接下來就是研發環境的搭建了,因為只有研發環境搭建好了,才可以進行後續的編程工作,比如說PHP,那麼就從網路上搜一下如何安裝PHP環境,能搜出一些簡單的教程,初學者按照教程一步一步來,頂多半天時間就可以把研發環境裝好了,如果是java,就需要先安裝jdk,進行環境變數的配置等,網上也有相關的教程,也是十分容易的,相信大家只要按照教程來做,都可以很輕易的把研發環境搭建起來的
選好視頻和書籍,輔助學習。既然是零基礎學習,就需要進行系統的學習,而不是到處網路零基礎的知識點進行學習。
代碼練習
跟隨教程一個一個章節的進行學習,需要注意的一點就是不能只是去看,那樣不行,要對每一個章節的知識點要親自用代碼敲一遍,運行一下試試效果才行,這樣才能提高自己的動手能力,才開始會覺得有一點生疏,慢慢的就會熟練起來,逐漸會增加編程的興趣。這個過程就是需要反復的進行練習,大量的代碼練習才行。這個過程是5步中最關鍵的階段了,重在代碼親自練習,對編程中有的章節不明白的地方,千萬不要放過去,可以在網上找一些相關的編程交流群,參加進去,在線上咨詢一些過來人,也許就可以輕松幫你解決疑問了,對你的學習十分幫助,並且整個過程也都是免費的。
項目實戰
如果說基礎教程都按部就班的都實踐過一遍了,那麼你就有一定的編程的基本功了,那麼自己就可以嘗試著做一些小項目,把學到的知識給串起來,進入項目實戰階段,比如說自己設計一個學生管理系統,並把它完成,如果不了解怎麼設計,可以去網上搜索。慢慢就有思路了。
我也在學習這方面,視頻書籍看過不少,最推薦的還是北京尚學堂的學習資料,Java.300集,Python400集,都是很經典的入門基礎教程,而且是結合項目學習的,很有意思,干貨滿滿,還都是免費的,推薦你可以去看看,相信可以帶你走進變成的世界。
從零開始學編程,第一關就是要選擇你所要學習的編程語言。面對著琳琅滿目的編程語言,初學者常常一籌莫展,拿不定主意,不知該選哪
『貳』 有學者提出了"mooc可以逐步取代學校教育"的設想.然而,在線學習真的發生了嗎
從MOOC到SPOC:兩種在線學習模式成效的實證研究
▲馬秀麟
內容提要:隨著教育信息化的深入,MOOC、SPOC等新型教學理念深受教育工作者的關注。然而,基於MOOC和SPOC的學習成效到底如何?在線自主學習真的發生了嗎?課題組從翻轉課堂模式下的計算機公共課教學實踐入手,通過採集學生在不同類型平台上學習成效的第一手數據,配以調查問卷及學習者的學習體驗,論證了兩種學習模式下學習成效的差異,並指出了MOOC型LSS及其學習模式的局限性,肯定了SPOC型LSS的優勢。最後,結合研究結論,強調了在LSS中關注學生個性化、建構面向學生個體的實時反饋機制對在線學習效果的重要作用,並對在線學習的管理和LSS的建設提出了建議。
關 鍵 詞:MOOC SPOC 在線學習 學習成效 學習支持系統
基金項目:本研究系教育部教改課題「面向未來教師計算思維能力培養的課程群建設」(項目編號:高教司2012-188-2-15)的系列成果之一,同時受2012年北京市共建項目「信息技術公共課教學模式改革與實踐」的資助。
[中圖分類號]G434 [文獻標識碼]A [文章編號]1672-0008(2016)04-0043-09
一、研究問題及其背景
(一)研究背景
教育信息化的深化,為教學模式的變革提供了很好的物質基礎和支撐平台,基於網際網路的各類新型教學模式如雨後春筍般快速萌芽並成長起來,MOOC(Massive Open Online Course,即大型開放式網路課程)教學、SPOC(Small Private Online Course,即小規模限制性課程)教學、FCM(Flipped Class Model,即翻轉課堂)等不斷地沖擊著一線教師的大腦,迫使一線教師為適應教改目標而不斷地調整著自己的教學方法和教學習慣[1]。
自2003年教育部啟動國家精品課建設項目以來,國家已投巨資建設了2000多門國家級網路精品課程。與此同時,省市級精品課、校級精品課的建設數量更是不計其數,已經覆蓋了學校教育的全部門類和學科。自MOOC概念出現後,哈佛公開課、耶魯公開課等國外名校的MOOC課程開始進入國內,清華大學、北京大學和北京師范大學等名校都不約而同地啟動了MOOC課程的建設。
從精品課程、MOOC課程的建設目標來看,其成果將會為全民提供最優質的學習環境和教育資源,實現「人人都能在家裡上哈佛」的夢想,能夠從根本上改變原有的教學模式,大幅度地提升公民受教育的水平。有的學者甚至提出了「MOOC可以逐步取代學校教育」的設想。然而,在線學習真如學者們預期的那樣真實地發生了嗎?
(二)在線學習真的發生了嗎
隨著MOOC教學模式的普及,MOOC的局限性也日益呈現出來。與精品課程建設、MOOC課程建設的轟轟烈烈相比,在線學習的效果卻差強人意。從精品課程和MOOC課程的實際應用情況看,很多課程的點擊率很低,大量課堂實錄視頻幾乎無人問津。即便學籍隸屬於網路教育學院,專門接受在線教育的學生,對其所在教育機構強制要求的網路課程,也遠遠達不到預期的訪問量。這一現象導致的直接後果是:(1)學生們總是感覺基於在線學習環境習得的知識和技能不夠扎實;(2)在參與招聘或職位競爭時,通過網路教育獲得學歷和學位的畢業生也常常遭受能力方面的質疑。
這不得不引起研究者的思考:網上的自主學習真的發生了嗎?在線學習的成效到底如何?我們的學生到底需要什麼樣的在線學習環境?這是教學研究者必須正視的問題。在這種情形下,國外的學者又給出了一個與MOOC教學相對應的新概念——SPOC,提出了「一種面向學生個性特點的小規模私人化在線課程」理念[2]。這一理念能否解決當前在線學習所面臨的困境?
(三)國內外研究現狀
MOOC是以在線網路課程為基礎,吸納不同地域、不同類型和不同知識層次的學習者參與到網上學習環境中,並把這些學習者組織到一個共同的學習社區內,促使不同地域的學生通過Internet實現在不同時空的社會知識建構[3],MOOC為教育資源的共享和教育公平提供了一線曙光。因此,MOOC一經出現,就受到眾多教育工作者的關注。MOOC概念於2009年開始出現,至2012年成為熱點詞彙。通過CNKI檢索國內學術論文,發現了2000多篇與MOOC相關的文章,自2010年的2篇至2015年的1300多篇,論文的總量逐年上升,反映了MOOC在教育領域的熱度。從已發表的論文看,探索以MOOC支持學科教學的研究佔了很大的比例,大約佔到4成;探索MOOC對當前教改所產生影響的研究大約佔2成,分析MOOC應用技術的研究也有一些,大約佔1成左右;還有學者從MOOC特色的視角分析了MOOC在學習支持方面的利與弊[4]。總之,多數學者都肯定了MOOC在教學中的價值,並從不同的視角開展了比較系統的研究。
SPOC則是近兩年出現的新概念,它是在MOOC基礎上,針對MOOC的不足而提出的在線學習形式。SPOC強調,要針對學生的個性化特點開展教學,向學生提供小規模且私人化的在線學習環境。它是以滿足面向學生的個性化特徵,並有針對性地對學生進行管理和控制的一種在線課程形式。對SPOC模式的探索,自2014年開始出現,在2014年至今的2年時間中,只有60多篇文章發表,而且多數文章都緊密地與MOOC概念結合在一起。其中,康葉欽於2014年發表的文章《在線教育的「後MOOC時代」——SPOC解析》[5]和徐葳等於2015年發表《從MOOC到SPOC——基於加州大學伯克利分校和清華大學MOOC實踐的學術對話》[6]都產生了比較大的影響,反映了SPOC研究的主要觀點、特徵和研究視角。而賀斌、曹陽的論文《SPOC:基於MOOC的教學流程創新》則闡述了以MOOC為基礎的SPOC的新特徵[7]。
二、研究設計與實施
(一)研究流程的設計
思辨的方式不能論證MOOC和SPOC對在線學習效果影響水平的問題,只有基於一線學生的個體體驗並藉助其中學習資源,真正參與到學習活動中的質量與頻次等客觀數據,才能較科學地論證「學生是否已藉助學習平台真正地開展了深度學習?」「學習平台(MOOC和SPOC)是以何種方式為學生實現知識建構提供支持的?」「學習平台的類型是否會對學生的最終學習效果產生較大的影響呢?」等問題。
為此,本研究制定了以下研究流程:首先,分別按照MOOC和SPOC規范,組建學習支持平台,並安排知識水平和學習風格沒有顯著性差異的兩組教學班,分別基於這兩類平台展開學習。然後,針對上述兩組教學實踐,從三種不同的渠道獲得其第一手數據。其次,利用數據分析手段,探索影響學習效果的關鍵因素。最後,基於前述研究結論,總結其中存在的問題和疑惑,開展第二輪的教學實踐,以便對研究結論進行驗證,保證研究的嚴謹性和科學性。
在這一過程中,數據的採集非常關鍵,其覆蓋面和客觀性對研究結論具有重要影響。本研究所採集的數據主要包含三個方面的內容:(1)來自調查問卷的數據和訪談結論,獲取學生對兩種教學平台的主觀體驗;(2)採集兩個年度的完課率數據,進行學習成效的總結性評價:利用平台跟蹤學生使用教學視頻和自測習題的情況,獲得客觀數據,以便進行學習成效的過程性評價;(3)採集學生們的考試成績和學業作品,作為評測學習成效的最終客觀數據。
(二)相關概念界定
1.LSS的概念
LSS即Learning Support System,也叫Learning Management System,即學習支持系統,泛指可以為學習活動提供支持的網路平台,此平台通常為「瀏覽器—伺服器」模式,至少包括學習資源管理、學生管理、作業管理等功能。MOOC教學和SPOC教學的開展,都需要植根於LSS平台之中。在本研究中,把基於MOOC理念的LSS稱為MOOC型LSS,而基於SPOC理念的LSS則簡稱為SPOC型LSS。
2.MOOC的概念
MOOC是Massive Open Online Course的縮寫,其含義為大型開放式網路課程。MOOC以基於網際網路的在線課程為基礎。藉助互聯網的開放性為學生提供學習資源,從而為學生提供一個不限時間、不限地域的學習環境。由於,MOOC通過網際網路進行傳播,它對參與學習的學生是沒有限制的,因此,MOOC是一種開放的教育形式。另外,處於MOOC平台中的學生多數採取非同步學習模式,由學生自主選取學習資源並確定自己的學習進度,所以它又是一種典型的「以學為中心」的、基於e-Learning理論的學習模式[8]。在具體教學實踐中,MOOC學習資源和MOOC教學活動的組織都必須藉助於LSS平台,以MOOC理念為指導的LSS被簡稱為MOOC教學平台,或MOOC型LSS。
開放性是MOOC的最大優勢。MOOC的出現,能夠把世界范圍內、想學習某一內容的學生組織到一個共同的學習社區中,從而促使他們超越地域障礙,通過網際網路實現不同時空的社會性知識建構[9]。在基於MOOC課程的學習社區中,盡管參與者的身份千差萬別,學習習慣和認知風格也很不相同,但他們都是基於對同一課程內容的興趣而組織到這個虛擬共同體之中的。
3.SPOC的概念
伴隨著MOOC教學實踐的推廣,MOOC的局限性也日益明顯。對MOOC而言,以不設「先修條件」和不設「規模限制」為特徵的開放性,既是MOOC的優勢,又是其局限性所在。香港大學的蘇德毅(Peter ESidorko)教授分析了MOOC不足,他指出,由於不設先修條件,導致在MOOC課程中,學生的知識基礎參差不齊。如果有過多知識基礎薄弱的學生參與到MOOC課程中,就會導致MOOC的完課率很低,這不僅損害了學生的自信心,也影響了教師的教學積極性[10]。
基於MOOC存在的問題,促使教育工作者進一步反思在線學習的組織模式和管理形式,「必備的知識基礎」、「規模限制」和「個性化支持」成為在線課程開發者必須重新思考的問題。基於此,福克斯教授提出了SPOC的概念。SPOC是Small Private Online Course的簡稱,它是相對於MOOC概念而提出來的,其中「Small」相對於MOOC中的Massive,Small限制了學生的規模,要求每個學習社區的參與者不可過多,這有利於教師管理;而Private則相對於Open而言,是指課程內容與學生的匹配性、針對性,即對學生設置必要的准入條件,只有知識基礎達到基本要求的申請者才可被納入到SPOC課程中[11]。
梳理SPOC的成功教學案例,發現多數SPOC課程主要面向校園內的大學生,只有少量SPOC課程面向校外在線學習者。對校園內的大學生而言,SPOC課程主要以課堂教學與在線學習相結合的方式開展,通常藉助講座視頻或微視頻實施翻轉課堂教學,並輔以實名的網上交互和在線評價;而面向社會的SPOC課程,需要預先明確設定的申請條件,並依據申請條件從申請者中選取學生。在這個過程中,還需要注意控制參與者的人數不能超過預設的規模。不論採用哪種模式,SPOC課程都強化了對入選者的管理和激勵,要求入選者積極參與在線討論,保證學習時間,認真完成各類習題和測試,並參與規定的考試等[12]。因此,SPOC教學,更強調學習支持的個性化、小眾性,關注了對學習者的管理和激勵[13]。
4.SPOC與MOOC的對比
雖然在技術平台、學習資源類型、課程體系組織結構等方面,SPOC和MOOC並無太大差異,但在教學設計與教學管理理念、教學流程組織、教學運行方式等方面,SPOC都發生了較大的變革[14]。因此,有學者認為,SPOC是對MOOC的繼承、完善與超越。對比SPOC和MOOC的特點,發現兩者的差異主要體現在以下幾個方面,如表1所示。
(三)研究的實施過程
1.前期准備
首先,在「北師大計算機基礎課教學服務平台(簡稱為BNUCEN-LSS)」中,為《動態網站設計與開發》課程開發完備的網路課程。在此網路課程中,除了向學生提供三類優質的視頻資源(微視頻、課堂實錄視頻、同行教師的同類視頻)外,還向學生提供了自測與自診斷試題、操作素材等輔助性資源。與此同時,BNUCEN-LSS為學生提供了交流論壇、作業發布與管理等公共模塊。另外,為了監控學生的學習效果,還專門在BNUCEN-LSS中開發了學習監控模塊,其能夠利用平台自動地記錄學生每次觀看視頻資源的時間長度,以便掌握學生的實際學習時長。
其次,在相關文獻和理論的指導下,設計面向學生的調查問卷。調查問卷以單選題為主,以五級量表的形式呈現,並藉助小范圍調查和德爾菲方法確保調查問卷的信度和效度。通過調查問卷獲取學生對自身學習情況的自我評價。
2.具體的實施過程
在2013年開設《動態網站設計與開發》課程時,基本遵循MOOC的教學理念,組織整個教學過程。採取了「自由注冊、匿名使用教學平台,向全校學生開放課程」的模式組織教學。而2014年的教學,則基本遵循SPOC的理念來組織教學活動。首先,對選課學生的專業和年級進行了限制,只允許理科專業(具有C語言設計基礎)的大二學生選修本課程;其次,獲得修讀資格的學生必須在BNUCEN-LSS中實名注冊,只有實名用戶才能訪問《動態網站設計與開發》課程的相關學習資源,並須藉助BNUCEN-LSS進行自診斷或參與各類討論。
對比兩個年級的教學模式,其區別主要體現在三個方面:(1)指導理念的不同。2013年的教學強調開放性,「開門教學」,對注冊成員的知識條件和專業條件不做任何限制;2014年的教學則強調內容的「適用性」,在選課階段就關注了課程內容對注冊學生的適用性水平,對於不適用本課程內容的學生,不予通過。(2)學習資源的針對性不同。2013年的教學活動以MOOC理念為指導,以課堂實錄視頻為主,並配套微視頻組織教學,學習資源的數量非常豐富,能夠適應不同類型、不同水平的學生選用。2014年的教學活動則以SPOC思路為指導,以當前正選學生為基準,對學習資源進行了篩選,剔除了難度過低和難度過高的資源,使資源的適應性和針對性較強。(3)教學過程中的管理模式不同。在2013年的教學過程中,對注冊成員的學習過程不做任何約束,強調學生的自主性,鼓勵學生們自主學習、開展自由組合的協作學習。因此,這些學生對LSS平台的使用是「匿名」的;而在2014年的教學過程中,要求學生實名使用LSS平台,而且教師也參與到LSS的論壇和討論過程中[16]。
三、數據分析及結論
(一)不同類型學習模式下的完課率
在2013年的課程中,共有329名學生在教學平台申請注冊,全體申請都被教師批准。至第3周,有192名學生退出(主要是中文、歷史和哲學等純文科院系的學生),獲得正選學生137人;至第9周(期中),又有60名學生退出,期末共有39名學生參加了期末考試,除1名學生不及格以外,有38名學生完課。最終完課率僅為11.5%。
在2014年的課程中,由於事先規定「只允許理科大二學生選修此課程」,所以共有64名學生申請注冊本課程,老師批准了59名(有5名體育學院的學生因為不具備選修課知識而沒有獲得批准),至選課周結束(第3周),有52名學生確定選修此課程。期末共有51名學生參加期末考試,51名學生都獲得了及格以上的成績,即有51名學生完課。所以,在正選學生中,完課率達到98%。
事後訪談發現,文科專業的很多學生都對網頁設計和動態網頁有很大的興趣,有學習《動態網站設計與開發》課程的內在動機,因此其選課積極性很高。但在注冊了該課程之後,就會發現由於先修課程不足,導致自己難以勝任課程內容,最後只能退選。另外,還有部分學生在選課開始時很有興趣,積極性很高,但由於個體的時間管理能力不強,導致其前期在本課程上的投入不足,只能在期末考試前「臨時抱佛腳」。這部分學生的最終退課率也非常高。
(二)不同類型學習模式下的視頻點播率
有鑒於2013年的課程是以MOOC的思路來組織的,其特點為:(1)「資源豐富,尊重學生的個性化學習習慣」、「學生匿名使用學習平台」;(2)在學生管理方面,教師只是以公告的方式要求學生自主點播教學平台內的微視頻或課堂實錄視頻,並沒有把學生點播視頻的質和量與期末的綜合評價掛鉤。
由於2013年的教學效果不好,所以本研究已在2014年改變了教學模式,主要做了以下調整:(1)在教學資源中剔除了過難和過易的資源,去掉了課堂實錄型的長視頻,僅保留了面向案例的微視頻;(2)對選課學生進行了限選和資格審查,要求學生實名使用LSS,並且向學生明確指出:學生觀看視頻的時長、學生參與教學論壇的質與量均被LSS自動記錄,而且作為期末綜合評價的子指標使用。2013-2014年學生點播微視頻的情況,如表2所示。
從表2可以看出,在2013年的教學中,課堂實錄型視頻的點播率很低,點播人次尚達不到每人一次(每個課堂實錄視頻被每個學生點播一次的總次數應大於2192次),而且完整點播整個45分鍾長視頻的總次數竟然為0,即在16講的45分鍾課堂實錄視頻中,137名正選學生竟然無人完整地看過1次課堂實錄視頻。而微視頻的情況稍好,對101個面向案例的微視頻中,137名學生的完整觀看次數為2152次,超過50%播放時長的點播次數為6192次。而在2014年的教學中,該情況比2013年有了很大的好轉,盡管正選學生數不到2013年學生數的一半,但「完整播放次數」和「超過50%時長的播放次數」都比2013年有很大提升。這說明:在總點播次數差距不大的情況下,2014年學生們的點播質量有較大的提升。
為了更好地對比兩個年度的視頻點播情況,本研究對表2中的點播次數進行了「均值化」處理,得到如表3所示的數據。均值化演算法為:對於表2中的總點播人次,依次除以視頻個數和正選學生的人數,就獲得了如表3所示的點播均值數。
從表3的「均值化」數據可以看出,2014年學生的點播質量和總數量都比2013年有了很大的提高,特別是在微視頻的「完整觀看人次」項,接近2013年的5倍,在「超過50%時長的觀看人次」指標項,達到了2013年的3倍有餘。這說明:在較好的管理和監控機制下,如果輔以針對性較好的資源支撐,學生的學習積極性和學習質量都會有很好的提升。
(三)不同類型學習模式下有效交互的比率
協作、交流與分享是在線學習的重要手段,對於學生們實現社會性知識建構具有重要意義。對比2013年和2014年學生在BNUCEN-LSS中對《動態網站設計與開發》課程發帖與回帖的情況,可以從側面反映出學生參與協同知識建構的層次和深度。
如果把與課程內容相關的主題帖和回復帖定義為「有效帖子」,其他類型的帖子稱為「無效帖子」,那麼。根據2013年和2014年學生參與在線討論的情況。主要獲得了如表4和表5的數據。
從表4可知,2013年內學生發帖的數量雖然也不少,但有效帖子所佔的比重較低,僅有6.63%。而在2014年,有效帖子的數量已佔發帖總量的93.96%,這表示在論壇的發帖中,絕大多數帖子都是與課程內容相關的有效帖子。另外,2013年主題帖的數量比較大,討論的內容也非常分散。而在2014年帖子的聚焦性較高,每個主題帖的回復量都比較高。
為了進一步掌握兩類教學模式下學生們在線交互的深度和質量,筆者對BNUCEN-LSS內部的深度帖(回復次數較高的帖子)進行了跟蹤,分別提取了兩類教學模式下回復量最高的3個帖子,獲得的數據如表5所示。
從表5可知,在2013年中,回復量排在前3位的3個主題帖大多與課程內容關系不大,而且其回復人多為遊客(不是本課程的學員),而且回復內容與課程內容基本無關。而在2014年的教學中,回復量排在前3位的帖子都與課程內容密切相關,而且教師發布的主題帖成為回復量最高的帖子,體現了教師在討論中的主導作用[17]。
(四)通過問卷調查和訪談所獲得的信息
針對2013年學生完課率低而且教學效果不佳的狀況,通過兩輪大范圍的問卷調查,筆者掌握了學生對基於MOOC平台開展翻轉課堂教學的看法,然後選擇了10位於期末考試前退選的學生,邀請他們參與了訪談,了解他們對MOOC教學模式的看法及最終退選的原因。
1.問卷調查及其結論
通過問卷調查,收集學生對以MOOC平台開展教學的看法。在完成了數據分析之後,找到了得分最低的三個維度,如表6所示。
2.基於訪談所獲得的信息
學生甲:我是學習中文的,對網頁設計非常有興趣,就想學會做出「高、大、上」的網頁,哪裡知道還要編程呢。我以前也沒有學過C語言,到了編程部分,壓力越來越大,最後就只能放棄了。
學生乙:之所以最後退選,就是怕掛科。選課時,看到老師的網站上有各種視頻,心裡特別有底。開課後,總覺得反正有視頻可看,也不用太著急,加上您也沒有督促。於是,每次上機實踐課上都先忙其他的事情。突然就到了期末,實在趕不上了,就只能放棄了。
學生丙:沒有壓力,就沒有動力。我是自己給耽誤了。不過,如果老師多督促些,可能就過了。
學生丁:我原來的計算機底子比較薄,本想借這門課程來補補。但在學習中,我覺得最大的困難是在學習平台中找不到所需的東西。在機房做網頁時,常常會因為一個很小的細節而導致網頁出錯,這時卻很難找到糾正錯誤的辦法。盡管平台中的資源很多,但不知道哪個是對症的,如果一個個地找,又沒那個耐心。慢慢地,就失去信心了。
3.基於問卷和訪談所獲得的主觀性結論
通過調查問卷和訪談,筆者發現導致2013級大量學生不能完課的原因主要集中於五個方面:(1)在MOOC型LSS中,資源過多、過濫,資源的組織方式缺乏針對性。在學習過程中,學習者不易獲得有效的學習支持;(2)因MOOC型LSS採用匿名系統,而疏於對學生有針對性地監督、激勵。而缺乏教師監督和激勵的大多數學生都不能持續地保持高水平的學習動機;(3)部分學生的自我管理、時間管理能力不強。在沒有教師監督和提醒的匿名MOOC型LSS中,由於他們經常拖延學習,日積月累下來,就會跟不上正常學習進度;(4)在學生匿名、教師「隱性主導」的MOOC型LSS中,學生的班級歸屬感不強,參與交互和討論的積極性不高,交互的質與量都較差;(5)部分學生因不了解課程的性質、知識要求而僅憑興趣選課,在選課後則會因不能勝任課程對先修知識的基本要求而退課[18]。
四、研究結論與建議
(一)MOOC教學的不足與局限性
自2009年出現MOOC的概念,它就受到眾多學者和教育管理者的重視。然而,隨著MOOC教學的應用與普及,其不足也逐漸顯現出來。
『叄』 人工智慧之模式識別|北京理工大學|Mooc|筆記|更新中
識別的基礎是認知
認知Cognition:獲取某種事物的特徵——概念抽象
識別Re-cognition:根據特徵決定某個具體的事物是不是某種事物——概念歸類
模式:一類事物的共同特徵
識別:對事物進行概念歸類
模式識別:依據事物的特徵進行概念歸類
特徵
相似性
類
特徵空間
向量空間
集合空間
通過訓練(學習)得到分類器模型參數
兩種模式:有監督學習和無監督學習——從訓練集中學習
對於每一個類別都給定一些樣本——形成一個具有類別標簽的訓練樣本集——分類器通過分析每一個樣本去尋找屬於同一類樣本具有哪些共同特徵——從訓練集中學習到具體分類決策規則——有監督的學習
分類器通過有監督學習模式學習到的每個類別樣本的特徵就是關於某個類別概念的知識—— 學習過程就是認知過程
樣本標簽如何得到?——人來給定
有監督學習——從人的經驗中學習分類知識——智能水平有上限
給定訓練樣本集但沒有給每一個樣本貼上類別標簽——屬於同一個類別的樣本之間的相似程度會大於屬於不同類別的樣本之間的相似程度——根據相似程度的大小,按照一些規則把相似程度高的一些樣本作為同一類——將訓練樣本集的一些樣本劃分成不同的類別——再從每一個類別的樣本中去尋找共同特徵,形成分類決策規則——無監督學習
無監督學習——自主地從數據所代表的自然規律中學習關於類別劃分的知識——分類器能達到更高的分類水平——未來模式識別發展的主要方向
屬於同一個類別的樣本之間的相似程度會大於屬於不同類別的樣本之間的相似程度——不同類樣本之間的相似度越小,分類決策規則的裕量也就越大
這樣可以作為評判用於監督學習的帶標簽訓練樣本集以及作為無監督學習結果的樣本集,它的優劣程度的一個指標,稱為「緊致性」准則,即:緊致性好的樣本集樣本的類內相似度遠大於類間相似度。
若要進行定量評判——確定如何度量相似性——可以設置多種指標——如:距離指標(最常用,距離可以定義在任意集合上,只要去計算滿足三條標准:1.正定性:距離是個大於等於0的正實數,當且僅當自己和自己計算距離時才為0;2.對稱性:樣本之間的距離值計算與計算順序無關;3.傳遞性:滿足三角關系——兩個樣本之間的距離一定小於等於分別於第三個樣本之間的距離之和。||在向量空間中可以定義歐氏距離、曼哈頓距離、切比雪夫距離等|| 非向量空間也可以定義距離,如:兩個字元串之間的編輯距離也是一種合法的距離定義)非距離的相似度量標准(如:餘弦相似度——使用向量空間中兩個向量之間的夾角來表達相似程度:cosθ=x T y/||x||·||y|| ;皮爾遜相關系數Pxy=cov(x,y)/∆x∆y;Jaccard相似系數)
如果我們希望有緊致性好的樣本集——那麼就希望能有有效的信息能夠將不同類的樣本很好地區分開——增加特徵的種類==增加特徵的維度——特徵的維度越多,用於識別的信息就越豐富,就有越多的細節信息可以將不同的樣本之間的相似度降低,提高樣本集的緊致性
不需要無限制地增加,只要不斷地增加模式識別問題中地特徵維數會產生維數災難(cruse of dimensionality)——當一個問題描述地維度不斷增加時會帶來計算量劇增與解法性能下降等嚴重問題——模式識別中的維數災難:隨著特徵維度的增加分類器的性能將在一段快速增加的區域後急速地下降並且最終無法使用
當特徵空間以同樣密度能夠容納的樣本總數呈指數增長時,而如果給定樣本集中的樣本數量沒有同步按照指數規律增加的話,那麼問題越往高維度特徵空間映射時樣本集中的樣本就越稀疏,從而使得樣本集的緊致性越來越差,因此分類器的性能越來越差。
要解決維數災難問題或者要同步地大量增加樣本集樣本的數量,難以實現,或者盡可能減少問題所使用的特徵維度。
在降低維度的同時盡可能地提升每一個維度在分類中的效能,從而使模式識別問題在較低的維度下解決。
特徵生成+特徵降維 重點領域——其結果直接影響分類器性能的好壞
我們期望分類器能夠從訓練集樣本中發現所要分類的各個類別的普遍特點即找到最優的分類器,使分類器在經過訓練後不僅能將訓練集中的樣本正確分類,而且對於不在訓練集中的新樣本也能夠正確地分類
因為有誤差所以不能同時滿足【正確分類樣本集】和【正確分類未知新樣本】
採集數據時由於數據採集方法的問題或者存在雜訊干擾得到的樣本特徵會存在誤差甚至會出現「異常數據」
如果我們要求分類器必須正確分類則會在分類規則上出現「失真」,從而在面對新的未知樣本進行分類時出現錯誤(使分類器泛化能力降低)====稱為分類器訓練過程中的「過擬合」
「結構風險最小化准則」
分類決策規則是從自動計算中獲取的而不是人工設定的
設計模式識別系統就是設計分類器的模型、所使用的的特徵和分類器參數的調整演算法
通過採集轉換得到計算機能接受和處理的數據
模式採集:感測器、變送器、模數轉換
得到的數據:待識別樣本的原始信息(包含大量干擾和無用數據)
通過各種濾波降噪措施降低干擾的影響,增強有用的信息,在此基礎上生成在分類上具有意義的各種特徵
得到的特徵:可以仍然用數值來表示,也可以用拓撲關系、邏輯結構等其他形式表示
經過一、二環節獲得的模式特徵維數都是很大的
主要方法:特徵選擇和特徵提取
特徵選擇:從已有的特徵中選擇一些特徵,拋棄其他特徵
特徵提取:是對原始的高維特徵進行映射變換,生成一組維數更少的特徵
分類器訓練是由計算機根據樣本的情況自動進行的,分類有監督學習和無監督學習
在分類器訓練結束後,對待分類的樣本按照已建立起來的分類決策規則進行分類的過程,在待分類的樣本在進行分類決策之前,與訓練樣本一樣要完成模式採集、預處理與特徵生成、特徵降維等環節的處理,還要持續不斷地對分類決策的結果進行評估,已改進分類器的性能。
模式識別演算法:統計模式識別(主流)、結構模式識別
統計模式識別:將樣本轉換成多維特徵空間中的點,再根據樣本的特徵取值情況和樣本集的特徵值分布情況確定分類決策規則。
線性分類器:是最基本的統計分類器,它通過尋找線性分類決策邊界來實現特徵空間中的類別劃分
貝葉斯分類器:它的決策規則是基於不同類樣本在特徵空間中的概率分布以逆概率推理的貝葉斯公式來得到類別劃分的決策結果
最近鄰分類器:把學習過程隱藏到了分類決策中,通過尋找訓練集中與待分類樣本最相似的子集來實現分類決策
神經網路分類器:來源於對生物神經網路系統的模擬,它的本質是高度非線性的統計分類器並且隨著計算機技術的發展從淺層網路向深層網路不斷演化
統計聚類分析:是無監督學習的典型代表
聚類分析:是無監督學習的典型代表,目前多採用統計學習的方法。
模糊模式識別:不是一獨立的方法,而是將模糊數學引入模式識別技術後對現有演算法的模糊化改造,它在更精確地描述問題和更有效地得出模式識別結果方面都有許多有價值的思路。
特徵降維:也不是獨立的模式識別演算法,但是是完成模式識別任務的流程中不可缺少的一個步驟,特徵降維通過尋找數量更少對分類更有效的特徵來提升整個模式識別系統的性能。
結構模式識別:
結構聚類演算法:將樣本結構上某些特點作為類別和個體的特徵通過結構上的相似性來完成分類任務。
句法模式識別:利用了形式語言理論中的語法規則,將樣本的結構特徵轉化為句法類型的判定,從而實現模式識別的功能。
一個典型的基於視覺的模式識別工程問題
多分類問題
模板匹配基本原理:為每一個類別建立一個或多個標準的模板,分類決策時將待識別的樣本與每個類別的模板進行比對,根據與模板的匹配程度將樣本劃分到最相似的類別中。
建立模板時依賴人的經驗所以適應性差
「分類決策邊界」
判別函數G(x)=0
如果判別函數是線性函數則稱為線性判別函數
線性判別函數+對應的分類規則=線性分類器
如果特徵空間是一維的,線性分類器的分類決策邊界就是一個點
如果特徵空間是二維的,線性分類器的分類決策邊界是一條直線
如果特徵空間是三維的,線性分類器的分類決策邊界是一個平面
如果維度很高,從數學上可以得到分類決策邊界是一個超平面
是不是任何一個模式識別問題都可以找到線性分類決策邊界呢?
給定一個樣本集,它是線性可分的嗎?
涉及問題:樣本集的線性可分性
如果一個樣本集,它的各個類別樣本的分布區域是相交的,那麼肯定是線性不可分的;如果各個類別樣本的分布區域是互不相交的,並且都是凸集,那麼它一定是線性可分的;如果互不相交但有的是凹集,也不一定是線性可分的,需要找出凹集區域最小的凸集包絡線稱為凸包,如果凸包都不想交,那麼樣本集才是可分的,否則不可分。
線性可分性——異或問題
非線性分類問題轉化為線性分類問題:
當我們將一個模式識別問題從低維特徵空間映射到高維特徵空間時,就將一個非線性分類問題轉化為一個線性分類問題。======》這種方法被稱為「廣義線性化」
需要多個線性判別函數——用二分類問題的組合來確定多分類的分類決策規則
根據一定的邏輯關系構成多分類的線性分類器
絕對可分:對於樣本集中的每一個類都有一個線性判別函數,可以把屬於這一類和不屬於這一類的樣本分開。——帶來的不可識別區域很多,整體分類器的性能不好。
兩兩可分:判別函數並不是用於判別屬於某一個或者不屬於某一個類的樣本,而是在兩個特定的類別中選邊站。減少了不可識別區域,提升了線性分類器的性能。
如果有k個分類,兩兩可分的線性判別一共需要C2k個判別函數,絕對可分的線性判別需要k個判別函數
最大值可分:樣本集中每一個類別對應有一個判別函數,而一個樣本將被劃分到取值最大的那個判別函數所對應的類別中。——不可識別區域消失,判別函數的數量也僅僅與樣本集中的類別數量一樣。
如何求最大值可分的判別函數?——工作量大
判別函數是樣本到決策超平面距離遠近的一種度量
樣本x到決策邊界的距離r正比於判別函數G(x)的值,判別函數的符號代表了距離r的符號,表示該模式位於決策邊界的正側還是負側
權向量w僅代表決策超平面的法向方向,長度不會影響決策邊界在特徵空間中的位置,可以取w為1,此時判別函數的值就是樣本到決策邊界的距離。
線性分類器——由線性判別函數及相應道德分類決策規則構成的
線性判別函數如何得到?——如何設計線性分類器?——訓練問題
線性分類器學習/訓練的一般思路:
G ij (x)=w T x+w 0
w T 權向量
w 0 偏置量
解區域中尋找最優解
1.設定一個標量的准則函數J(w,w 0 ),使其值能夠代表解的優劣程度,准則函數值越小,說明解越符合要求,越好。
2.通過尋找准則函數J(w,w 0 )的極小值,就能找到最優的一個解,是准則函數取得極小值的增廣權向量w,這就是最優解。 (w,w 0 ) *
訓練集數據的規范化
1.了解感知器模型
感知器(perception)模型是一種神經元模型
多路輸入+單路輸出
將所有輸入信號加權求和後於一個閾值相比較,如果大於閾值,則神經元輸出為1;小於等於閾值,則神經元輸出為0
沒有反饋與內部狀態
只能依靠輸入信號是否超過閾值來決定是否激活神經元的輸出
如果把感知器的輸入信號看作是一個待識別樣本的特徵向量,感知器的數學模型就構成了一個典型的線性分類器,可以做出非常明確的二分類決策
通過樣本集使感知器能夠學習到輸入權重值和輸出的閾值
感知器是一個通過輸入加權和與閾值的比較來決定是否激活輸出的神經元模型,這是一個線性分類器,輸入的權構成了線性分類決策邊界的權向量,激活輸出的閾值 heta就是分類決策邊界的偏置量w 0
求解目標:對所有樣本,都有w T x > 0
感知器演算法設定準則函數的依據:最終分類器要能正確分類所有的樣本
所以J設定為所有錯分樣本的判別函數值之和
X 0 是所有錯分樣本的集合
只要存在錯分樣本,准則函數一定大於0,只有當所有樣本正確分類了,准則函數值才能取得極小值0
梯度下降法
w(k+1)=w(k)-p(k+1)∆J(w(k))
對於線性可分的兩類問題其分類決策邊界為一n維特徵空間中的超平面H
一般情況下會有無窮多個解,當我們確定一個解所對應的權向量w,超平面的斜率和朝向就是確定的了,可以在一定范圍內平移超平面H,只要不達到或者越過兩類中距離H最近的樣本,分類決策邊界都可以正確地實現線性分類,所以任何一個求解得到的權向量w都會帶來一系列平行的分類決策邊界,其可平移的范圍具有一定的寬度,稱為分類間隔(Marigin of Classification)。
當我們改變w,使分類決策邊界的斜率和朝向隨之變化時,我們得到的分類間隔是不同的。
分類間隔越大,兩類樣本做決策時的裕量也就越大
找到可以使分類間隔最大的最優權向量 w*——支持向量機的出發點
分類間隔是由距離分類決策邊界最近的少量樣本決定的,這些樣本被稱為「支持向量 support vector」_支撐起了線性分類器在最大分類間隔意義下的最優解
支持向量機的優化求解目標是求取能帶來最大分類間隔的權向量w
分類間隔是支持向量到分類決策邊界的2倍
Max d = max 2|G ij (x)|/||w|| 支持向量機採用令|G ij (x)|=1 =>min ||w|| 將求取最大的d的問題轉化為求取權向量的長度最短的問題——為了方便進行二次優化——=>min 1/2 ||w|| 2
求取優化目標要求兩類中的所有樣本到分類決策邊界的距離都應該比支持向量更大,其他樣本的判別函數絕對值都需要大於1,即不等式約束條件為:圖
支持向量機採用拉格朗日乘子法將其轉化為無約束優化問題來求解,即通過將所有約束條件與拉格朗日乘子相乘後添加到優化目標中,在求取拉格朗日乘子最大值的條件下,求取最短的權向量w——凸規劃問題——存在唯一解——其充要條件可以通過拉格朗日函數分別對權向量w和偏置值w0求偏導來得到,即滿足這樣的條件——得到權向量的表達公式
KKT條件
經驗風險:訓練之後的分類器的錯誤分類樣本比例
經驗風險最小化 R_emp==o
只有當訓練集的樣本數趨近於無窮,訓練集中樣本的分布趨近於樣本的真實分布時,經驗風險才會趨近於真實樣本分類的風險
為了從根本上解決「過擬合」問題——提出「結構風險最小化SRM」min(R(w))
結構風險:在一個訓練好的分類器面對未知樣本時分類錯誤的概率
泛化誤差界:R(w)<=Remp(w)+φ(h/l) 置信風險 l是訓練集中的樣本數,h為分類器形式的vc維,而φ置信風險的具體計算公式:圖
如果分類器函數形式已經確定,則樣本數越大,置信風險也就越小;如果訓練集中的樣本數量不夠多,那麼結構風險的大小就受置信風險大小的很大影響,而此時置信風險的大小取決於分類器函數形式本身具有的VC維,函數的VC維h越大,則置信風險也就越大,則相應的結構風險也就越大,分類器的泛化能力越差。
什麼是VC維?一類函數所具有的分類能力
它的值是一類函數能打散兩類樣本集中最大樣本數量
分類器函數形式的階次越低,其VC維也就越小,在樣本集數量有限的情況下,訓練後的分類器結構風險就越小,泛化能力越強。
(支持向量機是階次最低的線性函數)——是支持向量機在不需要大量訓練樣本的情況下也能取得泛化能力特別強的分類器訓練結果的主要原因
所以支持向量機是應用結構風險最小化准則的一個結果
線性不可分問題:1.異常點干擾 2.非線性分類
線性支持向量機是把具有最大分類間隔的最優線性判別函數的求解轉化為求解最短權向量的二次規劃問題
異常點的判別函數值距離一定小於1
可以在約束條件中減去一項正數kesei,使判別函數的絕對值允許小於1,kesei就稱為鬆弛變數
把kesei也作為優化目標,希望kesei越少越好,越小越好。
最理想的情況:絕大多數支持向量外側的樣本包括支持向量對應的鬆弛變數都該為0.只有少數支持向量內側才有一個盡可能小的鬆弛變數。
因此,可以把所有鬆弛變數的和值也作為優化目標的一個分項,即在原來的最短權向量的二次優化目標基礎上再加上一項C乘以所有鬆弛變數的和。C為懲罰因子,表示對分類器中存在異常點的容忍程度。C越小,鬆弛變數的存在對整體優化過程的影響越小,對異常點的容忍度越高。如果C取0,約束條件被破壞。
軟間隔的支持向量機:使用鬆弛變數和懲罰因子的支持向量機
採用——廣義線性化(把低維空間中的非線性問題往高維映射,從而轉化為一個線性分類問題)