神经网络学习笔记(1):激活函数、梯度下降、基本构建等

    xiaoxiao2023-10-31  141

    神经网络是机器学习中的一个模型,可以用于两类问题的解答: 

    分类:把数据划分成不同的类别

    回归:建立数据间的连续关系

     

    感知器算法->误差函数(梯度下降)

    离散误差与连续误差

    要使用梯度下降,误差必须是连续的,误差函数必须是可微分的

     

    离散算法:学生是否被录取->连续算法:学生被录取概率

    激活函数:step function->sigmoid function

    多类别分类和 Softmax

    用 Python 编写 Softmax 公式:

    def softmax(L):

        expL = np.exp(L)

        sumExpL = sum(expL)

        result = []

        for i in expL:

            result.append(i*1.0/sumExpL)

        return result

     

    最大似然

    最大化概率

    交叉熵(cross entropy):

    交叉熵低的模型误差更小

    纯粹是因为好模型可以给更高的频率,取对数取反(因为加法比乘法好计算)就变成更小的交叉熵了

    目标:最大化概率->最小化交叉熵

    代码:

    def cross_entropy(Y, P):

        Y = np.float_(Y)

        P = np.float_(P)

    return -np.sum(Y * np.ln(P) + (1 - Y) * np.ln(1 - P))

    def cross_entropy(Y, P):

        sum = 0

        for i in range(0,len(Y)):

            a = -((Y[i] * np.ln(P[i]) + (1 - Y[i]) * np.ln(1 - P[i])))

            sum += a

    return sum

    多类别交叉熵:

    逻辑回归:

    计算误差函数:

    最小化误差函数:

    梯度下降

    总之

    与感知器算法是不是很相似!

    感知器跟梯度下降算法中,分类错误的点都希望告诉直线靠近点,因为最终都希望穿过这个点,使直线分类正确

    但是对于分类正确的点:

    感知器算法就会告诉直线什么都不要做

    梯度下降中,分类正确的点会告诉直线离得远点

     

    神经网络的构建:

    将bias当作单独的节点:

    多层级:

    多个输入:

    多个输出:多分类

    多个隐藏层:深度神经网络

     

    注:sigmoid 函数有一个完美的导数:

     

    池化层总的来说是用来:减小输出大小、避免过拟合

    降低过拟合是减小输出大小的结果,它同样也减少了后续层中的参数的数量。

    近期,池化层并不是很受青睐。

    部分原因是:

    现在的数据集又大又复杂,我们更关心欠拟合问题。

    Dropout是一个更好的正则化方法。

    池化导致信息损失。想想最大池化的例子,n个数字中我们只保留最大的,把余下的n-1完全舍弃了。

     

    设置

    H = height, W = width, D = depth

     

    输入维度是 4x4x5 (HxWxD)

    滤波器大小 2x2 (HxW)

    stride 的高和宽都是 2 (S)

    新的高和宽的公式是:

    new_height = (input_height - filter_height)/S + 1

    new_width = (input_width - filter_width)/S + 1

    池化层输出的维度大小是2x2x5

    最新回复(0)