梯度下降算法实现

-- y = x^2 - 3*x +2 的梯度下降算法 
local Gradient = {}

local alpha = 0.25
local e = 0.00001

local x0, y0

function getY(x)
	return (x*x - 3*x + 2)
end
-- f(x)的求导
function getDerivative(x)
	return 2*x - 3
end

function init()
	x0 = 0
	y0 = getY(x0)
end

function getSteepestDescend()
	local min_ = 0
	local x = x0
	local y = y0
	local y1
	local temp = 0
	
	-- gradient process 缩减x然后逼近y最小值
	while(true) do
		print("*****  " .. x .."  " .. y)
		temp = getDerivative(x)
		x = x - alpha * temp
		y1 = getY(x)
		
		if math.abs(y1-y) <= e then
			break
		end
		
		y = y1
		min_ = y
		print("@@@@ ".. min_)
	end
	
	return min_
end

function main_()
	local min__
	init()
	min__ = getSteepestDescend()
	print(min__)
end

main_()
理论可以看 这里
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值