招商Fintech学习笔记 -深度学习 - 深度学习简介

这篇博客介绍了深度学习的基础,从线性模型出发,详细讲解了构建XOR多层感知器,感知器的学习过程以及梯度下降在优化中的作用。接着讨论了Logistic回归和非线性模型,特别是神经网络架构,强调了神经网络如何通过线性分类器的组合形成复杂模型。最后提到了前向反馈和反向传播在训练神经网络中的应用。
摘要由CSDN通过智能技术生成

线性模型

构建XOR多层感知器

在这里插入图片描述
其中A为 and 操作,B为 or操作, C 为 not操作。

感知器如何学习‘分类’

蓝色点为分类错误的点,蓝黄两部分是由直线 l : 3 x 1 + 4 x 2 − 10 = 0 l:3x_1+4x_2-10=0 l:3x1+4x210=0 划分的,其中t黄色部分为 l : 3 x 1 + 4 x 2 − 10 &lt; 0 l:3x_1+4x_2-10&lt;0 l:3x1+4x210<0 ,对于蓝色误分点,想让他离直线更近,视频里采用更新参数的方法:在这里插入图片描述

实现感知器算法

  • 感知器伪代码:
    在这里插入图片描述
    其中预测为0表示该点在正区域而被错分至负区域;
    在这里插入图片描述
    python实现代码:
import numpy as np
# Setting the random seed, feel free to change it and see different solutions.
np.random.seed(42)

def stepFunction(t):
    if t >= 0:
        return 1
    return 0

def prediction(X, W, b):
    return stepFunction((np.matmul(X,W)+b)[0])

def perceptronStep(X, y, W, b, learn_rate = 0.01):
    for i in range(len(X)):
        y_hat = prediction(X[i], W, b)
        if y_hat - y[i]==1:
            change = (learn_rate * X[i]).reshape(len(W),1)
            W -= change
            b -= learn_rate
        elif y_hat - y[i]==-1:
            change = (learn_rate * X[i]).reshape(len(W),1)
            W += change
            b += learn_rate     
    return W, b 

# This function runs the perceptron algorithm repeatedly on the dataset,
# and returns a few of the boundary lines obtained in the iterations,
# for plotting purposes.
# Feel free to play with the learning rate and the num_epochs,
# and see your results plotted below.
def trainPerceptronAlgorithm(X, y, learn_rate = 0.01, num_epochs = 25):
    x_min, x_max = min(X.T[0]), max(X.T[0])
    y_min, y_max = min(X.T[1]), max(X.T[1])
    W = np.array(np.random.rand(2,1))
    b = np.random.rand(1)[0] + x_max
    # These are the solution lines that get plotted below.
    boundary_lines = []
    for i in range(num_epochs):
        # In each epoch, we apply the perceptron step.
        W, b = perceptronStep(X, y, W, b, learn_rate)
        boundary_lines.append((-W[0]/W[1], -b/W[1]))
    return boundary_lines

刚刚的感知器算法实现告诉我们,获取正确分类的方式,就是通过每一个错误分类的点,评估错误点位置与我们期望位置之间的差异,来慢慢的修正我们分类函数。

因为误差暗示了如何进行正确的分类,因此误差的定义就变得尤为重要,这也被称为误差函数

误差函数和梯度下降

误差函数提供给我们的预测值与实际值之间的差异,但是这个差异如何指导我们权重的更新呢?我们的目标是找到最小的误差函数值来找到与实际值误差最小的预测值。

在简单的线性方程中,我们可以通过判断“预测值与实测值相比是大了还是小了”来决定权重是增加还是减少。但是在更为复杂的非线性环境中呢?复杂的数学问题,我们就直接来看看学者们的解决策略。

假设一维问题是一条直线,那么二维问题就是一个平面,而三维问题就是一个曲面。曲面可以理解为有山峰也有低谷的地面,误差最小的地方就是低谷处,我们希望计算机找到的就是这个低谷的值。为了找到这个低谷,学者们发明了梯度下降

对于优化而言,连续型误差函数比离散型函数更好。
举个栗子:
在这里插入图片描述
以上述分类器为例,当学习步长很小时,分类线 l 移动过小,那么在经过一次移动后,仍有两个错误,这样不能得到任何有效信息去做下一步处理。视频中给了一个生动的例子:离散的损失函数相当于利用梯度下降算法从阿兹台克金字塔上走下来,即在第二个平台上始终看到两个错误,而在连续型损失函数中却可以得到高度的小幅变化信息,知道哪个方向变化最多。
在这里插入图片描述
连续性损失函数会因为位置的轻微扰动导致高度发生变化,而阿兹台克金字塔的高度都是以跳跃的形式从2到1到0,为此,我们需要从离散型预测变成连续型预测。

在这里插入图片描述
将离散数据转化为连续性数据,即将激活函数(activation function)由0-1阶跃函数转化为sigmoid函数:
在这里插入图片描述
其中sigmoid 函数定义为 y = 1 1 + e x p − ( w x + b ) y=\dfrac{1}{1+exp^{-(wx+b)}} y=

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值