从线性回归到多层感知机-task1

这里对《ElitesAI·动手学深度学习PyTorch版》Task1的学习做个简短的总结。

Task1中总共分为3个部分:线性回归softmax多层感知机

因为之前有些基础,所以3个部分原理部分都大致比较清楚,由于对pytorch不是那么熟悉,所以下面主要对之前不熟悉的一些函数方法进行总结,并对部分算法细节进行补充。

1. 线性回归

线性回归相当于一个两层的神经网络,只有输入层与输出层,且输出层的神经元个数为1,无激活函数,损失函数为MSE。

我的问题主要集中在mini-batch随机梯度下降
( w , b ) ← ( w , b ) − η ∣ B ∣ ∑ i ∈ B ∂ ( w , b ) l ( i ) ( w , b ) (\mathbf{w},b) \leftarrow (\mathbf{w},b) - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_{(\mathbf{w},b)} l^{(i)}(\mathbf{w},b) (w,b)(w,b)BηiB(w,b)l(i)(w,b)
上式中, B = b a t c h s i z e \mathcal{B}=batchsize B=batchsize

其实现代码如下所示:

def sgd(params, lr, batch_size): 
    for param in params:
        param.data -= lr * param.grad / batch_size # ues .data to operate param without gradient track
# 调用sgd
sgd([w, b], lr, batch_size)

上面代码中有两个点需要注意:

  1. param.data

    以x指代param,对x.data, x.detach(), x.item()进行区分:

    x.data 与 x.detach() 返回的 tensor 有相同的地方, 也有不同的地方:

    相同:

    • 都和 x 共享同一块数据
    • 都和 x 的 计算历史无关
    • requires_grad = False

    不同:

    • y=x.detach()返回一个新的Variable,从当前计算图中分离下来的,但是仍指向原变量的存放位置,不同之处只是requires_grad为false,得到的这个Variable永远不需要计算其梯度,不具有grad。

      即使之后重新将它的requires_grad置为true,它也不会具有梯度grad

      这样我们就会继续使用这个新的Variable进行计算,后面当我们进行反向传播时,到该调用detach()的Variable就会停止,不能再继续向前进行传播

    • y=x.data 在某些情况下不安全。.data的修改不会被autograd追踪,这样当进行backward()时它不会报错,回得到一个错误的backward值。

    关于x.item()用法:

    一个元素张量可以用item得到元素值,请注意这里的print(x)和print(x.item())值是不一样的,一个是打印张量,一个是打印元素:

    x = torch.randn(1)
    print(x)
    print(x.item())
    
    #结果是
    tensor([-0.4464])
    -0.44643348455429077
    
  2. param.grad/ batch_size

    这里除了batch_size,因为计算loss后调用了.sum()。

参考:

[1] 关于 pytorch inplace operation, 需要知道的几件事

[2] pytorch学习经验(一) detach, requires_grad和volatile

[3] pytorch .detach() .detach_() 和 .data用于切断反向传播

2. Softmax

softmax本来是指输出层的激活函数,现在一般也指代两层的神经网络,在输出层实用softmax()对输出结果进行归一化。

Why?

假设输出层有3个神经元,对某个样本可以得到输出 ( o 1 , o 2 , o 3 ) ({o_1}, o_2, o_3) (o1,o2,o3) = ( 0.1 , 0.1 , 10 ) (0.1,0.1,10) (0.1,0.1,10), 直接使用输出层的输出有两个问题:

  1. 一方面,由于输出层的输出值的范围不确定,我们难以直观上判断这些值的意义。例如,刚才举的例子中的输出值10表示“很置信”图像类别为猫,因为该输出值是其他两类的输出值的100倍。但如果 o 1 = o 2 = 1 0 3 o_1=o_2=10^3 o1=o2=103,那么输出值10却又表示图像类别为猫的概率很低。
  2. 另一方面,softmax函数是hardmax函数的近似函数,也是对hardmax函数的优化。解决了hardmax函数不可导的问题。因此被广泛的应用在神经网络中。

参考:

[1] softmax函数名字的由来(代数&几何原理)——softmax前世今生系列(2)

3. 多层感知机

多层感知机就是多层神经网络,无非就是层数多一些,且相比前面所说的线性回归softmax,中间层传递的时候加入了激活函数,如sigmoid、tanh、relu等等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值