• 山东大学人工智能导论实验二 前向传播和反向传播


    目录

    【实验目标】

    【实验内容】

    【代码要求】

    【文档要求】


    【实验目标】

    1. 理解前向传播和反向传播
    2. 应用作业一中提到的基本操作

    【实验内容】

    假设X有n个样本,属于m=3个类别, 表示样本属于第m类的概率,请实现的三次前向传播及反向传播(更新参数ωb),每次反向传播结束后更新并输出参数ωb的值,计算cross entropy loss,其中σ(∙)表示sigmoid函数。

    【代码要求】

    按代码模板实现函数功能

    【文档要求】

    前向传播及反向传播涉及到的公式计算(参考

    ①在前向传播的过程中,可以如下表示

     粘贴代码输出结果截图。

    1. import os
    2. import numpy as np
    3. import math
    4. def sigmoid(x):
    5. """
    6. Compute the sigmoid of x
    7. Arguments:
    8. x -- A scalar or numpy array of any size
    9. Return:
    10. s -- sigmoid(x)
    11. """
    12. # write your code here
    13. sig = 1 / (1 + np.exp(-x))
    14. return sig
    15. def softmax(x):
    16. """Calculates the softmax for the input x.
    17. Argument:
    18. x -- A numpy matrix of shape (n,)
    19. Returns:
    20. s -- A numpy matrix equal to the softmax of x, of shape (n,)
    21. """
    22. # write your code here
    23. x = np.exp(x) / np.sum(np.exp(x), axis=0, keepdims=True)
    24. return x
    25. def cross_entropy_loss(target, prediction):
    26. """
    27. Compute the cross entropy loss between target and prediction
    28. Arguments:
    29. target -- the real label, a scalar or numpy array size = (n,)
    30. prediction -- the output of model, a scalar or numpy array, size=(n, c)
    31. Return:
    32. mean loss -- cross_entropy_loss(target, prediction)
    33. """
    34. # write your code here
    35. delta = 1e-6
    36. return -np.sum(prediction * np.log(target + delta))
    37. def forward(w, b, x):
    38. """
    39. Arguments:
    40. w -- weights, a numpy array of size (m, 1)
    41. b -- bias, a scalar
    42. x -- data of size (n, m)
    43. Return:
    44. prediction
    45. """
    46. ## write your code here
    47. prediction = sigmoid(x @ w + b)
    48. # print(prediction.shape)
    49. return prediction
    50. def backward(x, target, prediction):
    51. """
    52. Arguments:
    53. x -- data of size (n, m)
    54. target -- data of size (n, num_class)
    55. prediction -- data of size (n, num_class)
    56. Return:
    57. dw, db
    58. """
    59. delta = target - prediction
    60. db = delta
    61. dw = sigmoid(x.T) @ delta
    62. return dw, db
    63. # don't edit
    64. if __name__ == '__main__':
    65. ## three samples
    66. x = np.array([[12, 3, 7, 4], [3, 10, 4, 9], [9, 6, 2, 0]])
    67. target = np.array([0, 1, 2])
    68. num_class = 3
    69. ## learning rate of the gradient descent update rule
    70. learning_rate = 0.001
    71. ## one-hot label
    72. target = np.eye(num_class)[target]
    73. n, m = x.shape
    74. w = np.zeros([m, num_class])
    75. b = 0
    76. # three iterations of forward and backward
    77. for i in range(3):
    78. prediction = forward(w, b, x)
    79. loss = cross_entropy_loss(target, softmax(prediction))
    80. dw, db = backward(x, target, prediction)
    81. # update w and b
    82. w = w - learning_rate * dw
    83. b = b - learning_rate * db
    84. print("iter = {}, w = {}, b = {}, loss= {}".format(i, w, b, loss))

    初次的实验结果如下:

            可见按照定义写出函数时结果并不理想,因为在main代码中设置的参数权重都设置为0了,导致log以后数值无穷,导致内存溢出,且一般这样做的效果并不好,在Andrew Ng的DL课程中有对应的解释。

            把权重或者参数都初始化为0,那么梯度下降将不会起作用。把权重都初始化为0,那么由于隐含单元开始计算同一个函数,所有的隐含单元就会对输出单元有同样的影响。一次迭代后同样的表达式结果仍然是相同的,即隐含单元仍是对称的。这个问题的解决方法就是随机初始化参数。把𝑊设为np.random.randn(m, num_class) (生成高斯分布),通常再乘上一个小的数,比如0.01,这样把它初始化为很小的随机数,只要随机初始化𝑊你就有不同的隐含单元计算不同的东西,因此不会有symmetry breaking 问题了。

            由于不能修改main中的初始化代码,因此我在网上查找了对应的解决方法,发现可以通过对数据精度的处理解决这个问题,这里我通过添加delta量,改变了浮点数的精度为1e-6,计算效果良好。如下所示:

    初学人工智能导论,可能存在错误之处,还请各位不吝赐教。

    受于文本原因,本文相关实验工程无法展示出来,现已将资源上传,可自行下载。

    山东大学人工智能导论实验2工程文件-前向传播和反向传播-深度学习文档类资源-CSDN下载山东大学人工智能导论实验2工程文件-前向传播和反向传播详解博客地址:https://blog.cs更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/m0_52316372/85912862

  • 相关阅读:
    密码学 | 承诺:Pedersen 承诺 + ZKP
    Sqoop实操案例-互联网招聘数据迁移
    Atlas with Hive 安装总结
    ArcGIS Pro中的回归分析浅析(下)地理加权回归工具(GWR)使用&小结
    git提交代码自动部署,git-runner
    计算机网络实验
    Java 集合学习笔记:HashMap
    Python学习笔记第四十二天(NumPy 字符串函数)
    xml转txt,划分数据集(train、test、val)
    文献阅读:RLAIF: Scaling Reinforcement Learning from Human Feedback with AI Feedback
  • 原文地址:https://blog.csdn.net/m0_52316372/article/details/125626360