摘 要:本文將BP(Back Propagation)神經網絡應用到題庫試題分值的確定中,以解決目前智能組卷研究中題庫試題分值確定的不合理性。在訓練網絡時,對標準BP算法作了相應改進,以適應該智能模型的建立。通過案例試驗,驗證了確定試題分值的智能模型的精度是符合實際要求的,在一定程度上為智能化組卷奠定了基礎。
關鍵詞:BP算法 題庫 試題分值
引言
題庫是保證考試題目具有較高質量、更好地達到教育測量目標的重要手段。隨著計算機及網絡技術,特別是人工智能技術在現代教育中的推廣及應用,教育領域對電子測評有了很大的重視,更多地關注題庫建設及智能組卷的研發。
目前,市面上已出現了各種各樣的題庫系統。實際上題庫建設仍缺乏科學理論指導,尤其是在試題參數確定上,主觀因素影響很大,使題庫系統不能很好地實現預期的目標。例如,試題分值的確定一直沒有一個很好的解決方案。傳統的做法是采用難度賦分法和時間賦分法[1],而沒有考慮其它因素的影響,如知識點數、知識點的重要程度等。考慮到試題分值與影響試題分值的參數之間的高度非線性關系,本文利用BP神經網絡所具備的模擬人的思維、非線性變換和自學等功能來構建試題分值智能確定模型,以克服傳統做法中各種隨機性和主觀性對分值的影響。
1 基本原理和方法
利用已知樣本對BP網絡進行訓練,使其獲得專家經驗和對確定試題分值的認識,當對新的樣本進行處理時,該網絡模擬人的思維并再現專家知識經驗,達到客觀地確定試題分值的目的,具體步驟是:
① 提取確定試題分值的參數,量化處理為(0,1)內的精確值作為網絡輸入。
② 利用已有的專家知識庫(樣本庫),通過BP算法對網絡進行訓練,通過對網絡參數及算法參數的調整得到穩定的網絡參數——分數確定模型。為了能在實際應用中保證可接受的計算精度,我們在訓練網絡時,使它在更高的精度下收斂。
③ 輸入需要確定分值的相關試題參數,網絡根據自學獲得的專家知識經驗對輸入值進行處理,然后輸出(0,1)的值作為最終結果(該試題的分值)。
2 分值確定的BP神經網絡結構
本文分析總結出影響題庫試題分值得7個參數(BP網絡的輸入向量),作為對該領域問題的首次研究,為了獲得足夠多的有代表性的訓練樣本,本文限制參數“題型”的取值為:1、2、3和4,分別代表單選題、多選題、判斷改錯題和填空題。根據考試理論、命題設計理論,屬于這幾類題型的每道試題所考察的知識點一般不超過3個,而且最適合考查識記、理解和應用三個認知水平。所以本文亦限制參數“知識點數”取[1,3]之間的整數,同時限制參數“認知層次”的取值為:1、2和3,分別代表識記、理解和應用。從而縮小了樣本空間。7個參數的取值見表1。
在神經網絡的應用中,網絡結構的選擇很重要,好的網絡結構可以減少網絡訓練次數,提高網絡學習精度。[2]隱含層數越多,神經網絡學習速度就越慢,根據Kosmogorov定理,在合理的結構和恰當的權值條件下,3層BP神經網絡可以逼近任意的連續函數,因此,我們選取了3層BP網絡結構,如圖1所示。
圖1
其中,輸入層節點數目n由影響試題分值參數個數確定,這里n=7,由于輸出結果為一個試題分值,故輸出節點數為m=1;在總結大量網絡結構的基礎上,得出隱含層神經元數目的經驗公式為
由此本文初步確定隱含層的神經元數目為s=5。在實驗仿真時,我們將動態調整隱含層的神經元數目,以獲得網絡
3 調整BP算法
3.1 動態調整隱含層單元數目和學習步長
如上所述,初步確定隱含層神經元數目為5,然后,通過人機交互,增加或減少隱含層神經元數目,分析比較全局誤差的震蕩程度、誤差遞減程度、誤差穩定后的網絡精確程度及網絡的收斂性能,從而確定隱含層神經元數目。本文訓練網絡時既沒有采用固定步長,也沒有采用自適應調整步長的方法,而是采用人機交互動態調整的方法,筆者認為這樣雖然麻煩,但對步長的調整是更智能的。
3.2 選擇模式對的方法及全局誤差的計算
本文將所有的樣本都存儲在數據庫中,并把2/3的樣本作為訓練樣本,在選擇模式對時,從訓練樣本的第一條記錄開始一直到最后一條,如此循環。經過反復實驗,驗證了這種方法比隨機選擇的方法更加有效,表現為網絡誤差遞減明顯,基本不存在震蕩。通過分析,筆者認為,在隨機選擇方法中,由于隨機性,不能保證所有的代表性樣本都被選中,使得樣本不再代表整體,失去了樣本的意義,致使誤差遞減緩慢,震蕩明顯,訓練不得收斂。采用下式計算全局誤差:
其中,fp是輸出層的實際輸出,y是期望輸出,M為訓練樣本總數,E是全局誤差,N為正整數,該值的選擇要合理,否則會使網絡進入局部極小值,或者誤差遞減緩慢,震蕩明顯,訓練難于收斂。
4 題庫試題分值確定實例及分析
4.1 樣本的選取
樣本應很好地代表整體,這就要求必須有足夠訓練樣本,否則樣本只能代表整體中的某一部分,這樣即使網絡訓練到了很高的精度,當實際應用時會發現網絡誤差有時變得很大,根本無法使用。根據這一原則及確定試題分值得參數個數和每一參數的取值,我們至少需要22500個訓練樣本。考慮到獲取樣本的難度及分值確定所需要的實際精度,本文從我們正在研發的《計算機文化基礎》課程的智能題庫中提取了具有高度代表性800個訓練樣本和400個試驗樣本,由于題庫中的試題的難度、區分度等參數是經過測試得到的,所以是比較可信的,答題時間及分值根據經驗人為估算而得。為了提高網絡精度,我們又組織了一個專門小組(三位相關專業的教授和7位信息技術教學論專業的碩士研究生)對1200個樣本的估計答題時間及分值進行了比較嚴密的估算,估算值精確到0.1。估算方法是十位小組成員分別對每個樣本的答題時間及分值估算,然后去掉一個最高分和一個最低分,把剩下的八個估算值計算加權平均值,所得的值即為最后的答題時間或分值。
4.2 樣本歸一化處理
為了使歸一化處理的結果盡可能均勻分布在[0,1]之間,本文采用了如下式所示的歸一化方法:
4.3 確定訓練網絡的精度
在實際中,我們通常以0.5的整數倍作為某一試題的分值,所以如果得到的BP網絡模型能精確到0.1就可以了,然后根據類四舍五入的方法把它處理為0.5的整數倍的一個值。當結果的小數部分小于0.25時,則舍掉,當介于[0.25,0.75],則處理為0.5,大于等于0.75,則向整數進1。這是符合實際要求的。然而,經訓練達到某一精度的網絡在實際應用時,其誤差總是圍繞某固定值上下波動。特別是當樣本的代表性較差時,更是如此。為此,我們在訓練樣本時,將網絡的全局誤差設置得比實際要求的更小。本研究將其設為10-5。
4.4 網絡訓練過程
本研究在網絡訓練時,隱含層單元數動態調整,以得到更合適的隱含層單元數目。沒有采用動量項(經試驗,沒有動量項效果更好),步長動態調整,將其初值設為1,然后根據誤差遞減情況以0.05的幅度在[0,1]之間調整。循環選擇800個訓練樣本對網絡進行訓練,每循環m次計算一次全局誤差,每循環n(n為m的整數倍)次觀察記錄一次誤差變化情況,通過分析比較決定步長調整方向。訓練網絡的主要程序代碼(c#)如下:
button3_Click(object sender,EventArgs e)
{h_num= int.Parse(textBox1.Text.ToString());
//動態指定隱含層單元數
wj=new double[h_num];//輸出-隱含權值
wij=new double[7,h_num];//隱含-輸入權值
hvj=new double[h_num];//隱含層閾值
int i,j;
netj=new double[h_num];//隱含層輸入向量
xi=new double[7];//輸入層輸入向量
comm2=conn1.CreateCommand();
hoj=new double[h_num];//隱含層輸出向量
ej=new double[h_num];//隱含層的一般誤差
//初始化權值、閾值、步長及動量系數
a=double.Parse(textBox2.Text.ToString());
//初始化輸出節點閾值
double e1=0.00001,E1=e1+1,E2=0;
int count=0,count1=0;
for(i=0;i<7;i++)
{for(j=0;j {hvj[j]=rand.Next(-100,100)*0.01; wj[j]=rand.Next(-100,100)*0.01; wij[i,j]=rand.Next(-100,100)*0.01; } } //計算隱含層輸 comm1.CommandText = \" select count(*) from gyhVIEW\" ; yb_count = (int)comm1.ExecuteScalar(); yb_count = yb_count * 2 / 3;ybbh = 0; while(e1 {if(count<=0){E2=0;} ybbh+=1; if(ybbh>=yb_count+1) ybbh=1; ybbh=rand.Next(1,yb_count+1); comm2.CommandText = \"select * from gyhVIEW where 樣本編號=\"+ \" ’\" + ybbh + \" ’\" ; dr1 = comm2.ExecuteReader(); if (dr1.Read()) {for (i = 0;i < 7;i++) xi[i] = double.Parse(dr1[i + 1].ToString()); yt= double.Parse(dr1[\" y\" ].ToString());} dr1.Close(); //計算隱含層輸入和輸出 for(j= 0;j < h_num;j++) {netj[j] = 0; for(i = 0;i < 7;i++) netj[j]+= wij[i,j] * xi[i]; netj[j] -= hvj[j];} for (j = 0;j < h_num;j++) hoj[j]=1/(1+ Math.Exp(-netj[j])); //計算輸出層的輸入和輸出 net=0; for(j=0;j net+=wj[j]*hoj[j];net-=ov; yp=1/(1+Math.Exp(-net)); //計算輸出層和隱含層的一般誤差 d=(yt - yp) * yp * (1 - yp); for (j = 0;j < h_num;j++) ej[j] = wj[j] * d * hoj[j]*(1 - hoj[j]); //修正wj和ov for (j = 0;j < h_num;j++) wj[j]= wj[j]+p * d * hoj[j]; ov = ov+n * d; //修正wji和hovj for (j = 0;j < h_num;j++) { for (i = 0;i < 7;i++) wij[i,j]=wij[i,j] + a * ej[j] * xi[i]; hoj[j]=hoj[j] +ej[j] * u;} E2 += Math.Pow((yt - yp),2);count += 1; if (count >= 3*yb_count) { E1 = E2 /3*yb_count;count = 0;count1 += 1; if (count1 >= 1000) {if (MessageBox.Show(E1.ToString() + \" a=\"+ a.ToString() + \"減小步長?\",\"提示信息\", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { a -= 0.05;} if (MessageBox.Show(E1.ToString() + \"增加步長?\",\"提示信息\", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { a += 0.05;} count1 = 0;}}} 通過反復訓練和比較分析,最后將網絡隱含層單元數目確定為6,每循環3次計算一次全局誤差,次每循環3000次觀察記錄一次誤差變化情況,學習步長從1調整到0.65,最后在0.65時收斂。共訓練了1128萬次。模型穩定后,輸入層與隱含層的連接權值如圖3所示(其中i表示輸入層單元序號,wij表示輸入層單元i與隱含層單元j的連接權值),隱含層與輸出層的連接權值及隱含層閾值如圖4所示(其中j表示隱含層單元序號),輸出層閾值為-33.05475。 觀察分析網絡模型的測試誤差,基本都小于0.005,最小值為0.0001399517,最大值為0.01044011,完全滿足題庫試題分值確定所要求的精度(0.1),符合實際用需求。 結束語 本文將BP神經網絡應用到題庫試題分值的確定中,為題庫試題分值得確定提供了一種可行的方法。在應用BP算法時,動態調整隱含層單元數目,動態調整學習步長,采用循環選擇訓練樣本的模式對選擇方法,經過特定次數的循環訓練后計算一次全局誤差。所有這些均源于本模型的準確建構。另外,如果訓練樣本能夠很好地代表整體,用這種方法將能建立精度更高的確定試題分值的智能模型。 參考文獻: [1]胡中鋒,李方.教育測量與評價[M].廣東高等教育出版社,2003.7. [2]Hadi,MuhammadN.S.Neuralnetworks applications in concrete structures. Computers and Structures Volume:81,Issue:6,March,2003,pp.373-381. [3]姜華,趙潔.基于BP神經網絡的學習行為評價模型及實現[J].計算機應用與軟件,2005.22,(8):89-91. [4]戴永偉,雷志勇.BP網絡學習算法研究及其圖像識別應用[J].計算機與現代化,2006.11:68-70. [5]宋乃華,邢清華.一種新的基于粒群優化的BP網絡學習算法[J].計算機工程,2006.14:181-183. 基金項目:全國教育科學“十一五”規劃教育考試學研究重點課題項目(2006JKS3017);山西省教育科學“十一五”規劃課題(GH-06106)。 注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。”