AI-深度神经网络(前向传播算法和滑动平均模型)以及激活函数实例

AI-深度神经网络(前向传播算法和滑动平均模型)以及激活函数实例 AI-海king 2023-03-22 11:56:13 1284

深度神经网络


神经网络广泛应用于监督学习和强化学习。这些网络基于一组彼此连接的层。
在深度学习中,大多数非线性隐藏层的数量可能很大;大约1000层。
DL模型比普通ML网络产生更好的结果。
我们主要使用梯度下降法来优化网络并最小化损失函数。
Imagenet是数百万数字图像的存储库,可用于将数据集分类为猫和狗等类别。除了静态图像、时间序列和文本分析之外,DL网络越来越多地用于动态图像。
训练数据集是深度学习模型的重要组成部分。此外,反向传播是训练DL模型的主要算法。
DL处理训练具有复杂输入和输出变换的大型神经网络。

深度网络

我们必须决定是否构建分类器,或者是否尝试在数据中找到模式,以及是否应该使用无监督学习。为了从一组未标记的数据中提取模式,使用了受限的玻尔兹曼机器或自动编码器。
选择深度网络时,请考虑以下几点:

  • 对于文本处理、情感分析、解析和名称实体识别,我们使用循环网络或递归神经张量网络或RNTN;递归网络可以用于在字符级运行的任何语言模型。
  • 对于图像识别,可以使用深度信念网络DBN或卷积网络。
  • 对于对象识别,可以使用RNTN或卷积网络。对于语音识别,可以使用递归网络。通常,具有整数线性单元或RELU和多层感知器的深度信念网络是分类的好选择。
  • 对于时间序列分析,始终建议使用递归网络。
    神经网络已经存在了50多年,但直到现在,它们已经上升到了一个突出的位置。原因是他们很难训练;当我们试图用一种叫做反向传播的方法训练它们时,我们遇到了一个叫做消失或爆炸梯度的问题。当这种情况发生时,训练需要很长时间,而准确度则需要退居次要地位。当训练数据集时,我们连续计算成本函数,即一组标记的训练数据的预测输出和实际输出之间的差异。然后调整权重和偏差值,直到获得最小值。训练过程使用梯度,这是成本将随着权重或偏差值的变化而变化的速率。

前向传播算法和滑动平均模型


我们使用我们的几个权重系数矩阵W和偏置向量b对输入值向量x进行一系列线性运算和激活运算。从输入层开始,我们逐层向后计算,直到运算到达输出层,输出结果是一个值。

①滑动平均模型的作用是提高测试值上的健壮性,一个参数变化很大,那势必会影响到测试准确度问题,从他的公式看shadow_var = decay shadow_var + (1 - decay) var_new,decay控制着该shadow变量的更新速度,decay越大,那么很明显其值就会越倾向接近于旧值,而decay越小,那么var_new产生的叠加作用就会越强,其结果就会越倾向于远离旧值,那这样波动就很大,通常认为稳定性就不够好当然就不够健壮了
②通俗的理解就是“让参数有滑动效果,目的是让参数不是一个常数,而是一个可以变的参数,提高模型的稳定性”

代码实例:

激活函数的一般性质
(1) 通常,我们使用梯度下降算法来更新神经网络中的参数,因此激活函数必须是可微的。如果函数是单调递增的,则导数函数必须大于零(便于计算),因此要求激活函数是单调的。
(2) 限制输出值的范围输入数据通过神经元上的激活函数控制输出值。输出值为非线性值。激活函数获得的值决定了神经元是否需要根据极限值激活。换句话说,我们可以通过激活函数来确定我们是否对神经元的输出感兴趣。
(3) 非线性是因为线性模型的表达能力不够(从数据输入到与权重值相加和偏移,这是一个在线性函数中对权重和输入数据进行加权和的过程,例如(
)因此,激活函数的出现也为神经网络模型增加了非线性因素。激活函数具有上述特征,其核心意义在于,没有激活函数的神经网络只是一个线性回归模型,无法表达复杂的数据分布。神经网络中加入了激活函数,这相当于引入了非线性因素,从而解决了线性模型无法解决的问题。
不同激活函数的选择对神经网络的训练和预测有不同程度的影响。接下来,我们将分析神经网络中常用的激活函数及其优缺点。
激活函数与损失函数如下:

def activity_func(a):
    # simgoid函数
    yp = 1 / (1 + np.exp(-1 * a))
    return yp

def dA_dZ(Z):
    # 返回simgoid函数的dA/dZ
    return np.multiply((1 / (1 + np.exp(-1 * Z))), (1 - (1 / (1 + np.exp(-1 * Z)))))

def loss_func(YP, Y, error):
    size = YP.shape[1]  # 得到YP的数量
    Y_arr = Y.tolist()
    YP_arr = YP.tolist()
    # 避免后续求dA时出现除0现象
    temp = np.where(YP == 1)
    for index, item in enumerate(temp[0]):
        YP[item, temp[1][index]] = 0.999999999999
    dA = -(np.true_divide(Y, YP) + np.true_divide((Y - 1), (1 - YP)))
    loss_part1 = np.dot(Y, np.log(YP).T)
    loss_part2 = np.dot(1 - Y, np.log(1 - YP).T)
    loss = -(loss_part1 + loss_part2)
    count = 0
    for index, item in enumerate(Y_arr[0]):
        if abs(item - YP_arr[0][index]) < error:
            count += 1
    accuracy = count / size
    return dA, float(loss) / size if not np.isnan(float(loss) / size) else 0, accuracy

def relu(z):
    return np.multiply(z, z > 0)

def rele_dA_dZ(z):
    return z > 0
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
AI-海king
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区