python求雅可比矩阵_在Python中计算神经网络的雅可比矩阵

本文探讨了如何在Python中计算神经网络的雅可比矩阵,分别使用Tensorflow、Autograd和Numpy进行实现,并比较了它们的效率。在Numpy中直接指定层的前向和反向传播可以得到最佳性能,适用于需要在测试时快速计算雅可比矩阵的情况。
摘要由CSDN通过智能技术生成

通常,神经网络是一个多变量,矢量值函数,如下所示:

函数f有一些参数θ(神经网络的权重),它将一个N维向量x(即猫图片的N像素)映射到一个m维矢量(例如,x属于M个不同类别中的每个类别的概率):

在训练过程中,通常会给输出附加一个标量损失值——分类的一个典型例子是预测类概率的交叉熵损失。当使用这样的标量损失时,M = 1,然后通过执行(随机)梯度下降来学习参数,在此期间重复计算相对于θ的损失函数的梯度。因此,在训练期间计算标量输出值相对于网络参数的梯度是很常见的,并且所有常见的机器学习库都可以这样做,通常使用自动微分非常有效。

然而,在推理时网络的输出通常是一个向量(例如,类概率)。在这种情况下,查看网络的雅可比矩阵可能会很有趣。在这篇文章中,我解释一下什么是雅可比矩阵,然后我探索和比较一些可能实现用Python来完成。

什么是雅可比矩阵,为什么我们会关心?

我们称y为f的输出向量。f的雅可比矩阵包含y的每个元素的偏导数,相对于输入x的每个元素:

该矩阵告诉我们神经网络输入的local perturbations将如何影响输出。在某些情况下,这些信息可能很有价值。例如,在用于创造性任务的机器学习(ML)系统中,让系统为用户提供一些交互式反馈可以很方便,告诉他们修改每个输入维度将如何影响每个输出类。

Tensorflow

让我们一起尝试使用Tensorflow。首先,我们需要一个示例网络来玩。在这里,我只对在测试时计算现有网络f的雅可比行列式感兴趣,所以我不专注于训练。假设我们有一个简单的网络[affine → ReLU → affine → softmax]。我们首先定义一些随机参数:

import numpy as np

N = 500 # Input size

H = 100 # Hidden layer size

M = 10 # Output size

w1 = np.random.randn(N, H) # first affine layer weights

b1 = np.random.randn(H) # first affine layer bias

w2 = np.random.randn(H, M) # second affine layer weights

b2 = np.random.randn(M) # second affine layer bias

使用Keras,我们按如下方式实施我们的神经网络:

import tensorflow as tf

from tensorflow.keras.layers import Dense

sess = tf.InteractiveSession()

sess.run(tf.initialize_all_variables())

model = tf.keras.Sequential()

model.add(Dense(H, activation='relu', use_bias=True, input_dim=N))

model.add(Dense(O, activation='softmax', use_b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值