码迷,mamicode.com
首页 > 其他好文 > 详细

梯度下降、过拟合和归一化

时间:2018-09-08 15:18:15      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:免费   学习   one   html   new   迭代   归一化   列表   批量   

好的课程应该分享给更多人:人工智能视频列表-尚学堂,点开任意一个之后会发现他们会提供系列课程整合到一起的百度网盘下载地址,包括视频+代码+资料,免费的优质资源。当然,现在共享非常多,各种mooc、博客、论坛等,很容易就可以找到各种各样的知识,能走到哪一步,都在我们自己。希望我能够一直坚持下去,加油!

梯度下降法

看这个吧,简书上的:深入浅出--梯度下降法及其实现

 

批量梯度下降

 

  ·初始化W,即随机W,给初值

  · 沿着负梯度方向迭代,更新后的W使得损失函数J(w)更小

  · 如果W维度是几百维度,直接算SVD也是可以的,几百维度以上一般是梯度下降算法

  · 

 

# 批量梯度下降
import numpy as np

# 自己创建建数据,哈哈
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]

learning_rate = 0.1     # 学习率,步长=学习率x梯度
n_iterations = 1000     # 迭代次数,一般不设置阈值,只设置超参数,迭代次数
m = 100     # m个样本

theta = np.random.randn(2, 1)   # 初始化参数theta,w0,...,wn
count = 0   # 计数

for iteration in range(n_iterations):
    count += 1
    # 求梯度
    gradients = 1/m * X_b.T.dot(X_b.dot(theta)-y)
    # 迭代更新theta值
    theta = theta - learning_rate * gradients
    # print(count, theta)
    
print(count, theta)

 

随机梯度下降

  · 优先选择随机梯度下降

  · 有些时候随机梯度下降可以跳出局部最小值

 

import numpy as np

X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]

n_epochs = 500 
t0, t1 = 5, 50
m = 100

def learning_schedule(t):
    return t0/(t + t1)

# 随机初始化参数值
theta = np.random.randn(2, 1)

for epoch in range(n_epochs):
    for i in range(m):
        random_index = np.random.randint(m)
        xi = X_b[random_index:random_index+1]
        yi = y[random_index:random_index+1]
        gradients = 2*xi.T.dot(xi.dot(theta)-yi)
        learning_rate = learning_schedule(epoch*m + i)
        theta = theta - learning_rate * gradients

print(theta)

 

梯度下降、过拟合和归一化

标签:免费   学习   one   html   new   迭代   归一化   列表   批量   

原文地址:https://www.cnblogs.com/xv-shilin/p/9609024.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!