<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      最優化算法-梯度下降

      梯度下降算法,參考Edwin《最優化導論》8.2章節,算法采用go語言實現。

      此處算法仍然存在疑惑,主要是獲取梯度下降時如何確定步長,即使采用割線法獲取最優步長,那么割線法的初始值又如何確定??

      下面程序中雖然采用了牛頓法獲取極值,但非常依賴初始取值范圍!!

      /*****************************************
       * FileName  : grad.go
       * Author    : fredric
       * Date      : 2017.09.01
       * Note      : 梯度算法
       * History   :
      *****************************************/
      package grad
      
      import(
          "fmt"
          "math"
      )
      
      //無法采用牛頓方法求得極值,主要原因在于無法確定初始值,造成導數偏差很大
      func _get_argmin_newton(x1, x2, x3, grad_x1, grad_x2, grad_x3 float64) float64 {
      
          fmt.Printf("_get_argmin input value %f,%f,%f,%f,%f,%f\n", x1, x2, x3, grad_x1, grad_x2, grad_x3)
      
          //f(x - a*delta) = (x1 - a * grad_x1 - 4)^4 + (x2 - a * grad_x2 - 3)^2 + 4 * (x3 - a*grad_x3 + 5)^4
          //f'(x - a*delta) = 4 * grad_x1 * (x1 - a * grad_x1 - 4)^3
          //                + 2 * grad_x2 * (x2 - a * grad_x2 - 3)
          //                + 16* grad_x3 * (x3 - a*grad_x3 + 5)^3
          //f''(x - a*delta)= 12 * grad_x1^2 * (x1 - a * grad_x1 - 4)^2
          //                + 2  * grad_x2^2 * a
          //                + 48 * grad_x3^2 * (x3 - a*grad_x3 + 5)^2
          //采用牛頓法求取f(a)的最小值
          
          //此處的初始值還是比較疑惑,因為初始值取不對,結果差太遠
          var a0 float64 = 0.0002
          var a1 float64 = 0.0005
          delta := 0.0005
      
          for math.Abs(a1 - a0) > delta {
      
              a0 = a1
      
              //fmt.Printf("a0: %f\n" , a0)
              //fmt.Printf("grad_x2: %f\n" , grad_x2)
              //fmt.Printf("grad_x2 * a0: %f\n" , grad_x2 * a0)
              //fmt.Printf("grad_x2 * 0.2: %f\n" , grad_x2 * 0.2)
      
              f_1_v := 4 * grad_x1 * (x1 - a0 * grad_x1 - 4)* (x1 - a0 * grad_x1 - 4)* (x1 - a0 * grad_x1 - 4) + 
              2 * grad_x2 * (x2 - a0 * grad_x2 - 3) + 
              16* grad_x3 * (x3 - a0 * grad_x3 + 5)* (x3 - a0 * grad_x3 + 5) * (x3 - a0 * grad_x3 + 5)
      
      
              f_2_v := 12 * grad_x1 * grad_x1 * (x1 - a1 * grad_x1 - 4)* (x1 - a1 * grad_x1 - 4) + 2  * grad_x2* grad_x2 * a1 + 48 * grad_x3* grad_x3 * (x3 - a1 * grad_x3 + 5)* (x3 - a1 * grad_x3 + 5)
      
              a1 = a0 - f_1_v / f_2_v
      
              //fmt.Printf("----------abs = %f\n", math.Abs(a1 - a0))
      
          
              fmt.Printf("step value = %f f_1_v = %f, f_2_v = %f\n", (a0 + a1)/2, f_1_v, f_2_v)
          }
      
          return (a0 + a1)/2
      }
      
      //采用常量方式求極值
      func _get_argmin_const(x1, x2, x3, grad_x1, grad_x2, grad_x3 float64) float64{
      
      
          /*
          * 不是很搞的清楚,當采用快速下降算法時如何確定固定步長,網上有一個說法實踐是正確的
          * 即滿足李普希茲條件存在L>0使得|f(x1)-f(x2)|<=L|x1-x2|,步長取1/L
          * 下面這個例子由于存在x3這個高階,所以如果步長取大的話,完全沒有辦法計算
          */
      
          return 0.0004
      }
      
      func DoGradAlgorithm(){
      
          //計算f(x1,x2,x3) = (x1 - 4)^4 + (x2 - 3)^2 + 4*(x3 + 5)^4
          //所謂梯度本質上也是導數,只是針對多維度上,取了各個維度偏導數,組成向量;
          //最速下降法就是在每次迭代時取當前負梯度方向的能獲取的函數數最小值
      
          //初始值x0 = [4, 2, -1]
          x1 := 4.0
          x2 := 2.0
          x3 := -1.0
      
          //取三次迭代
          for i := 0; i < 4; i++ {
      
              grad_x1 := 4 * (x1 - 4)*(x1 - 4)*(x1 - 4)
              grad_x2 := 2 * (x2 - 3)
              grad_x3 := 16 * (x3 + 5)* (x3 + 5)* (x3 + 5)
      
              a := _get_argmin_newton(x1,x2,x3, grad_x1, grad_x2, grad_x3)
      
              fmt.Printf("grad_x1 = %f, grad_x2 = %f, grad_x3 = %f\n", grad_x1, grad_x2, grad_x3)
      
              x1 = x1 - a * grad_x1
              x2 = x2 - a * grad_x2
              x3 = x3 - a * grad_x3
      
              fmt.Printf("x1 = %f, x2 = %f, x3 = %f\n", x1, x2, x3)
      
          }
      }

       

      posted @ 2017-09-16 16:12  Fredric_2013  閱讀(402)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 97一期涩涩97片久久久久久久| 国产一级r片内射免费视频| 人人色在线视频播放| 亚洲AV日韩AV激情亚洲| 国产av一区二区午夜福利| 在线中文一区字幕对白| 亚洲色成人网站www永久| 色综合网天天综合色中文| 久久se精品一区二区三区| 亚洲熟妇自偷自拍另亚洲| 日韩秘 无码一区二区三区| 18禁无遮挡啪啪无码网站| 国产精品一二三中文字幕| 玖玖在线精品免费视频| 久久久精品94久久精品| 天堂中文8资源在线8| 久久99久久99精品免视看国产成人| 亚洲av永久无码天堂影院| 亚洲永久精品免费在线看| 亚洲国产午夜精品福利| 国产美女深夜福利在线一| 国产不卡在线一区二区| 精品无码一区二区三区水蜜桃| 国产精品小视频一区二页| 国产亚洲一在无在线观看| 四房播色综合久久婷婷| 亚洲国产精品午夜福利| 亚洲线精品一区二区三区| 亚洲伊人久久综合成人| 884aa四虎影成人精品| 日本欧美大码a在线观看| 国产又色又爽又刺激在线观看| 国产精品人伦一区二区三| 99精品热在线在线观看视| 免费看成人欧美片爱潮app| 亚洲第一最快av网站| 26uuu另类亚洲欧美日本| av色欲无码人妻中文字幕| 东京热高清无码精品| 韩国美女福利视频在线观看| 国产AV无码专区亚洲AV漫画|