最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

股票量化軟件:赫茲量化系統(tǒng)神經(jīng)網(wǎng)絡(luò)輕松學(xué)---舍棄

2023-10-09 16:04 作者:大牛啊呢  | 我要投稿

舍棄:提升神經(jīng)網(wǎng)絡(luò)收斂性的一種方法

在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí),會(huì)將大量特征饋入每個(gè)神經(jīng)元,且很難評(píng)估每個(gè)獨(dú)立特征的影響。 結(jié)果就是,某些神經(jīng)元的誤差會(huì)被其他神經(jīng)元的調(diào)整值抹平,這些誤差從而會(huì)在神經(jīng)網(wǎng)絡(luò)輸出處累積。 這會(huì)導(dǎo)致訓(xùn)練在某個(gè)局部最小值處停止,且誤差較大。 這種效應(yīng)涉及特征檢測(cè)器的協(xié)同適應(yīng),其中每個(gè)特征的影響會(huì)隨環(huán)境而變化。 當(dāng)環(huán)境分解成單獨(dú)的特征,且可以分別評(píng)估每個(gè)特征的影響時(shí),很可能會(huì)有相反的效果。

2010年,多倫多大學(xué)的一組科學(xué)家提議從學(xué)習(xí)過(guò)程中隨機(jī)排除一些神經(jīng)元,作為復(fù)雜協(xié)同適應(yīng)問(wèn)題的解決方案 [12]。 訓(xùn)練中減少特征的數(shù)量,會(huì)增加每個(gè)特征的重要性,且特征的數(shù)量和質(zhì)量構(gòu)成的持續(xù)變化降低了它們協(xié)同適應(yīng)的風(fēng)險(xiǎn)。 此方法稱為舍棄。 有時(shí)拿這種方法的應(yīng)用與決策樹進(jìn)行比較:通過(guò)舍棄一些神經(jīng)元,我們?cè)诿看斡?xùn)練迭代中獲得一個(gè)含有其自身權(quán)重的新神經(jīng)網(wǎng)絡(luò)。 根據(jù)組合規(guī)則,這樣的網(wǎng)絡(luò)具有很大的可變性。

實(shí)現(xiàn)

如今,我們已研究過(guò)理論方面,我們來(lái)繼續(xù)研究如何在函數(shù)庫(kù)中實(shí)現(xiàn)此方法的變體。 我們遇到的第一件事是實(shí)現(xiàn)兩種不同算法。 其一在訓(xùn)練過(guò)程需要,而第二個(gè)則用于生產(chǎn)。 相應(yīng)地,我們需要根據(jù)每種獨(dú)立情況,為神經(jīng)元明確指出應(yīng)采用的算法。 為此目的,我們將在基準(zhǔn)神經(jīng)元級(jí)別引入 bTrain 標(biāo)志。 該標(biāo)志值對(duì)于訓(xùn)練 應(yīng)設(shè)為 true,而對(duì)于測(cè)試 則設(shè)為 false。

class CNeuronBaseOCL ? ?: ?public CObject ?{ protected: ? bool ? ? ? ? ? ? ? bTrain; ? ? ? ? ? ? ///< Training Mode Flag


以下輔助方法將控制該標(biāo)志值。

? virtual void ? ? ?TrainMode(bool flag) ? ? ? ? ? ? { ?bTrain=flag; ? ? ? ? ? ?}///< Set Training Mode Flag ? ? ? virtual bool ? ? ?TrainMode(void) ? ? ? ? ? ? ? ? ?{ ?return bTrain; ? ? ? ? ?}///< Get Training Mode Flag ? ?

該標(biāo)志特意在基準(zhǔn)神經(jīng)元級(jí)別實(shí)現(xiàn)。 如此在以后開(kāi)發(fā)時(shí)能夠啟用舍棄相關(guān)的代碼。

2.1. 為我們的模型創(chuàng)建一個(gè)新類

為了實(shí)現(xiàn)舍棄算法,我們來(lái)創(chuàng)建新的 CNeuronDropoutOCL 類,它將包含在我們的模型當(dāng)中作為單獨(dú)的層。 新類將直接繼承自 CNeuronBaseOCL 基準(zhǔn)神經(jīng)元類。 在受保護(hù)模塊中聲明變量:


  • OutProbability — 指定神經(jīng)元的舍棄概率。

  • OutNumber ?— 神經(jīng)元的舍棄數(shù)量。

  • dInitValue ?— 掩碼向量初始化值;在本文的理論部分,該系數(shù)被指定為 1/q。

另外,聲明兩個(gè)指向類的指針:

  • DropOutMultiplier ?— 舍棄向量。

  • PrevLayer ?— 指向上一層對(duì)象的指針;它在測(cè)試和實(shí)際應(yīng)用時(shí)會(huì)用到。

class CNeuronDropoutOCL ? ?: ?public ? CNeuronBaseOCL ?{ protected: ? CNeuronBaseOCL ? ?*PrevLayer; ? double ? ? ? ? ? ?OutProbability; ? double ? ? ? ? ? ?OutNumber; ? CBufferDouble ? ? *DropOutMultiplier; ? double ? ? ? ? ? ?dInitValue; //--- ? virtual bool ? ? ?feedForward(CNeuronBaseOCL *NeuronOCL); ? ? ? ? ? ? ? ///<\brief Feed Forward method of calling kernel ::FeedForward().@param NeuronOCL Pointer to previous layer. ? virtual bool ? ? ?updateInputWeights(CNeuronBaseOCL *NeuronOCL) {return true;} ? ? ? ?///< Method for updating weights.@param NeuronOCL Pointer to previous layer. //--- ? int ? ? ? ? ? ? ? RND(void) ? { xor128; return (int)((double)(Neurons()-1)/UINT_MAX*rnd_w); ?} ? ///< Generates a random neuron position to turn off public: ? ? ? ? ? ? ? ? ? ? CNeuronDropoutOCL(void); ? ? ? ? ? ? ? ? ? ?~CNeuronDropoutOCL(void); //--- ? virtual bool ? ? ?Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl, uint numNeurons,double out_prob, ENUM_OPTIMIZATION optimization_type); ? ?///< Method of initialization class.@param[in] numOutputs Number of connections to next layer.@param[in] myIndex Index of neuron in layer.@param[in] open_cl Pointer to #COpenCLMy object. #param[in] numNeurons Number of neurons in layer #param[in] out_prob Probability of neurons shutdown @param optimization_type Optimization type (#ENUM_OPTIMIZATION)@return Boolen result of operations. //--- ? virtual int ? ? ? getOutputIndex(void) ? ? ? ? ?{ ?return (bTrain ? Output.GetIndex() : PrevLayer.getOutputIndex()); ? ? ? ? ? ? } ?///< Get index of output buffer @return Index ? virtual int ? ? ? getGradientIndex(void) ? ? ? ?{ ?return (bTrain ? Gradient.GetIndex() : PrevLayer.getGradientIndex()); ? ? ? ? ?} ?///< Get index of gradient buffer @return Index ? //--- ? virtual int ? ? ? getOutputVal(double &values[]) ? { ?return (bTrain ? Output.GetData(values) : PrevLayer.getOutputVal(values)); } ?///< Get values of output buffer @param[out] values Array of data @return number of items ? virtual int ? ? ? getOutputVal(CArrayDouble *values) ? { ?return (bTrain ? Output.GetData(values) : PrevLayer.getOutputVal(values)); } ?///< Get values of output buffer @param[out] values Array of data @return number of items ? virtual int ? ? ? getGradient(double &values[]) ? ?{ ?return (bTrain ? Gradient.GetData(values) : PrevLayer.getGradient(values)); ? ?} ?///< Get values of gradient buffer @param[out] values Array of data @return number of items ? virtual CBufferDouble ? *getOutput(void) ? ? ? ? ? { ?return (bTrain ? Output : PrevLayer.getOutput()); ? ? ?} ? ? ? ? ? ? ? ? ///< Get pointer of output buffer @return Pointer to object ? virtual CBufferDouble ? *getGradient(void) ? ? ? ? { ?return (bTrain ? Gradient : PrevLayer.getGradient()); ?} ? ? ? ? ? ? ? ? ///< Get pointer of gradient buffer @return Pointer to object //--- ? virtual bool ? ? ?calcInputGradients(CNeuronBaseOCL *NeuronOCL); ? ? ? ? ?///< Method to transfer gradient to previous layer by calling kernel ::CalcHiddenGradient(). @param NeuronOCL Pointer to next layer. ? //--- ? virtual bool ? ? ?Save(int const file_handle);///< Save method @param[in] file_handle handle of file @return logical result of operation ? virtual bool ? ? ?Load(int const file_handle);///< Load method @param[in] file_handle handle of file @return logical result of operation //--- ? virtual int ? ? ? Type(void) ? ? ? ?const ? ? ? ? ? ? ? ? ? ? ?{ ?return defNeuronDropoutOCL; ? ? ? ? ? ? ? ?}///< Identificator of class.@return Type of class ?};


股票量化軟件:赫茲量化系統(tǒng)神經(jīng)網(wǎng)絡(luò)輕松學(xué)---舍棄的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
南开区| 连平县| 桦南县| 古丈县| 荃湾区| 耒阳市| 邳州市| 海林市| 昌乐县| 沙坪坝区| 淮阳县| 石台县| 离岛区| 塘沽区| 左贡县| 民权县| 营口市| 巴彦县| 比如县| 诏安县| 汉中市| 牡丹江市| 西宁市| 襄樊市| 托里县| 大渡口区| 贺州市| 松江区| 惠来县| 阿荣旗| 临泉县| 马尔康县| 焉耆| 梨树县| 彭山县| 西和县| 正镶白旗| 财经| 南澳县| 思茅市| 德令哈市|