神经网络2(训练过程)

本文介绍了机器学习中的核心概念,包括线性可分与非线性可分问题,强调了深度学习在解决非线性问题中的作用。讨论了训练数据与测试数据的区别,以及过拟合和欠拟合的现象。深入探讨了两种常见的损失函数——均方误差和交叉熵误差,并展示了它们的Python实现。此外,还讲解了数值微分、梯度的概念,以及梯度下降法的原理和实现。最后,提到了随机梯度下降法在训练过程中的应用。
摘要由CSDN通过智能技术生成

1.从数据中学习

线性可分问题可以通过有限次的学习进行解决,非线性可分问题无法通过自动学习来解决。

1.1数据驱动

 

深 度 学 习 有 时 也 称 为 端 到 端 机 器 学 习

1.2训练数据与测试数据

分为训练数据与测试数据是为了评价模型的泛化能力, 训练数据(监督数据)。

过拟合

欠拟合

2.损失函数

2.1均方误差

 

import numpy as mp
def mean_squared_error(y,t):
    return 0.5*np.sum((y-t)**2)

t=[0,1,0,2,3]
y=[0,1,0,2,3]
print(mean_squared_error(np.array(y),np.array(t)))

2.2交叉熵误差

 

tk中只有正确解标签的索引为1,其他均为0(one-hot表示)。

import numpy as np
def cross_entropy_error(y,t):
    delta=1e-7
    return -np.sum(t*np.log(y+delta))

t=[0,0,0,1,0,0,0]
y=[0.1,0.05,0.1,0.05,0.1,0.1,0.1]
print(cross_entropy_error(np.array(y),np.array(t)))

函数内部在计算np.log时,加上了一个微小值delta。这是因为,当出现np.log(0)时,np.log(0)会变为负无限大的-inf,这样一来就会导致后续计算无法进行。作为保护性对策,添加一个微小值可以防止负无限大的发生。

2.3mini-batch学习

 

前面的损失函数都是针对单个数据进行的,如果是多个数据可以写成上面的一个形式。

其实只是把求单个数据的损失函数的式扩大到了N份数据,不过最后还要除以N进行正规化。通过除以N,可以求单个数据的“平均损失函数”。通过这样的平均化,可以获得和训练数据的数量无关的统一指标。

3.数值微分

3.1计算导数时候的差分

(x+h) (x-h)

中心差分

x (x+h)

前向差分

def numerical_difff(f,x):
    h=1e-4
    return f(x+h)-f(x-h)/2*h

def numerical_diff(f,x):
    h=1e-4
    return f(x+h)-f(x)/h

4.梯度

import numpy as np

def ff(x):
    return x[0]**2+x[1]**2

def numerical_gradient(f,x):
    h=1e-4
    grad=np.zeros_like(x)
    
    for idx in range(x.size):
        tmp_val=x[idx]
        x[idx]=tmp_val+h
        fxh1=f(x)
        
        x[idx]=tmp_val-h
        fxh2=f(x)
        print(fxh2)
        
        grad[idx]=(fxh1-fxh2)/2*h
        x[idx]=tmp_val
    return grad

print(numerical_gradient(ff,np.array([0.1,0.01])))

 

1.梯度法

学习高原

极小值, 鞍点 :梯度为0,但不是最小值

梯度法公式

 

其中n,表示更新量,在神经网络学习中,称为学习率。像这样的参数被称为超参数,这种参数一般是人工设定的。

用python实现梯度下降法

def gradient_descent(f,init_x,lr=0.01,step_num=100):
    x=init_x
# x是指参数向量
    for i in range(step_num):
        grad=numerical_gradient(f,x)
        x-=lr*grad
        #迭代更新参数向量,当偏导数为正的时候减,偏导数为负的时候  加上他的绝对值。
    return x

4.2随机梯度下降法

由一个叫SGD的函数来实现,

主要步骤:

  • mini-batch
  • 计算梯度
  • 更新参数
  • 重复 1-3

关于epoch

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值