• 深度学习笔记(1-1)


    第一周

    1.什么是深度学习

    深度学习指的是训练神经网络

    神经网络是啥?

    比如做一个房价预测,输入一个房子的面积x,通过一个神经元(neuron),输出一个房价y

    大点的神经网络就是把这些神经元组合起来image-20210706090624686

    修正线性单元,即ReLU(Rectified linear unit),修正是指取不小于0的值

    image-20210706085914678

    监督学习

    输入一些x,得到一个y

    image-20210706091722245

    image-20210706091221885

    结构化的数据

    例如一张表,每个属性都有一个值,

    非结构化的数据

    例如一张图,一段音频

    为什么现在深度学习现在流行起来了呢?

    早期的数据很少,传统的模型进入平台期

    现在我们能获得很多数据,硬件水平也上来了,算力很高

    如何获得一个好的神经网络呢

    规模越大的神经网络,和数据越多的神经网络效果约好

    我们规定用小写字母m来表示训练集的规模

    第二周

    1.logistic回归

    二分分类问题:根据x得出y是0或1

    关于logistic的训练集和测试集

    image-20210708101702975

    2.关于logistic回归的概述

    给出x是一个((n imes m))的实矩阵来表示图像,想要求得是不是一只猫的概率(hat{y}=P(y=1|x)space 其中0lehat{y} le 1)

    已知w也是一个((n imes m))的实矩阵,b是一个实数

    所以我们根据线性回归得到(hat{y}=sigmoid(w^Tx+b))

    (sigmoid(z)=dfrac{1}{z+e^{-z}})

    所以在做回归的过程中的关键就是train出w和b

    b对映一个拦截器

    但是在有些课程中,有一些符号会将w和b合并起来,其中的( heta^0)表示的是b

    image-20210708103728789

    3.关于logistic的损失函数

    有上节课可知(hat{y}=sigmoid(w^Tx+b),wherespace sigmoid(z)=dfrac{1}{z+e^{-z}})

    其中为了区分训练样本和测试样本,训练样本((i))所对应的预测值是(hat{y}^{(i)})

    损失函数可以定义为(L(hat{y},y)=dfrac{(hat{y}-y)^2}{2}),但是这个函数是非凸的,我们可能得到的是一个局部最优,不利于梯度下降

    所以这里的损失函数来评估训练结果,(L(hat{y},y)=-(yloghat{y}+(1-y)log(1-hat{y})))

    成本函数衡量了w和b在训练集上的效果(J(w,b)=frac{1}{m}sum^{m}_{i=1}L(hat{y}^{(i)},y^{(i)})=-frac{1}{m}sum^{m}_{i=1}(y^{(i)}loghat{y}^{(i)}+(1-y^{(i)})log(1-hat{y}^{(i)})))

    评估函数越小越好

    image-20210708111312543

    4.关于梯度下降法

    使用梯度下降方法来训练出w和b,为了找到最小的(j(w,b))值,我们取一点后朝着最快的下降反向往下走,反复执行此操作,直到找到最小值,因为logistic的损失函数是一个凸函数,所以我们可以找到最小值

    [w:=w-alpha dw ]

    其中的(alpha)表示的是学习率,也就是步长,(dw)表示的是J函数关于w的导数,所以,所谓的梯度下降法就是使整体朝着下降速度最快的方向下降,同理,对于参数b,也是一样的、需要注意的是,(dw和db)表示的应该是关于J函数的偏导数

    image-20210712145155937

    5.关于导数

    导数=函数在这点的斜率=函数的变化率

    6.关于计算logistic的梯度下降方法

    首先logistic的计算公式

    (z=w^Tx+b)

    (hat{y}=a=sigmoid(z))

    (a=sigmoid(z)=dfrac{1}{z+e^{-z}})

    (L(a,y)=-(ylog a+(1-y)log(1-a)))

    假设有两个特征值x1,x2,输入参数w1,w2和b

    (z=w_1x_1+w_2x_2+b)

    (L=(a,y))

    然后我们来求导可以得到

    (da=dl/da=-y/a+(1-y)/(1-a))

    (dz=dl/dz=dl/da * da/dz=a-y)

    然后我们可以求得(dw)(db)的值

    (dl/dw_1 = dw_1=x_1dz \ dl/dw_2 = dw_2=x_2dz \ dl/db = db=dz)

    根据梯度下降的公式进行一次计算

    (w_1:=w_1 - alpha dw_1 \ w_2:=w_2 - alpha dw_2 \b:=b - alpha db)

    就能得到一次梯度下降的参数

    image-20210722211129218

    7.m个样本的梯度下降

    关于logistic的成本函数在第3节中已有叙述:

    (J(w,b)=frac{1}{m}sum^{m}_{i=1}L(a^{(i)},y^{(i)})=-frac{1}{m}sum^{m}_{i=1}(y^{(i)}log a^{(i)}+(1-y^{(i)})log(1-a^{(i)})))

    当只有单个样本(w1^{(i)})(w2^{(i)})(b^{(i)}),就像上节所示例的那样,

    所以此时(alpha J/alpha w_1=1/m * sum_{i=1}^{m} alpha L/alpha w_1)(省略了很多细节

    可以发现,这就是把上节的(dw_1)加起来求平均值,所以我们可以用伪代码来实现

    image-20210722214115783

    8.向量化

    我们用向量化后的数值来计算的时间对比于用for可以快很多

    image-20210726141823933

    可以看到,向量化之后的运行速度会大幅上升

    因为numpy可以调用CUP和GPU来进行大量并行运算

    总之我们能避免使用for就尽量避免

    9.向量化来实现logistic回归(课后作业)

    # 首先:下面是无向量化的实现
    

    image-20210726144221704

    
    

    10.python中的广播

    image-20210726150310330

    给一个矩阵求出carb和fat和protein中所占的百分比(使用向量化

    import numpy as np
    A = np.array([[56.0, 0.0, 4.4, 68.0], [1.2, 104.0, 52.0, 8.0],
                  [1.8, 135.0, 99.0, 0.9]])
    temp1 = A.sum(axis=0)
    p = 100 * A / (temp1.reshape(1, 4))
    print(p)
    

    image-20210726150506801

    image-20210726151739307

  • 相关阅读:
    Java8简明教程第二章
    Java8简明教程-2
    Java8简明教程第一章
    Java8简明教程-1
    redis的初级使用
    hdu--4681--dp
    hdu--5091--线段树
    hdu--1542&&1255&1828--线段树<扫描线>
    hdu--5139--bc
    hdu--5128--计算几何<算不上.暴力模拟> && hdu--5131--初级cmp
  • 原文地址:https://www.cnblogs.com/37kiazz73/p/15064251.html
Copyright © 2020-2023  润新知