Reverse-Engineering Deep ReLU Networks

David Rolnick, Konrad P. Kording

Introduction

A deep neural network computes a function from inputs to outputs, where the structure and parameters of the network control the function that is expressed. While each parameter influences the overall function, this influence is highly nonlinear, and the effects of different neurons within the network would appear superficially to be hopelessly entangled. Consequently, it has been widely supposed in the field that it is impossible to recover the structure and parameters of a network merely by observing its output on different inputs.

Were it possible to reverse-engineer a neural network from the function it computes, there could be serious implications for security and privacy. In many deployed deep learning systems, the output is freely available but the network used to generate that output is not. The ability to recover a confidential network could even expose data used to train the network if such data could be reconstructed from the network’s weights.

The related question of reverse-engineering biological neural networks is of foundational interest in neuroscience. Experimental neuroscientists can record the output of some neurons (e.g. complex cells in primary visual cortex) but not others (e.g. simple cells) and must also infer the synaptic weights between them. Our understanding of the brain would be greatly improved if it were possible to identify the internal components of a neural circuit based on recordings of the output of that circuit.

In this work, we show mathematically and empirically that it is, in fact, often possible to recover the structure and weights of an unknown ReLU network by querying it. Our approach leverages the fact that a ReLU network is piecewise linear and transitions between linear pieces when one of the ReLUs of the network transitions from its inactive to its active state. For neurons in the first layer of the network, such transitions occur along hyperplanes through input space; the equations of these hyperplanes determine the weights and biases of the first layer (up to sign and constant scaling). For neurons in subsequent layers, transitions occur along “bent hyperplanes” that bend where they intersect bent hyperplanes associated with earlier layers. Measuring the intersections between bent hyperplanes allows us to recover the weights between the corresponding neurons.

We prove that the architecture, weights, and biases of a deep ReLU network can be recovered (up to isomorphism) from the arrangement of regions on which the network is linear.

We describe an algorithm to recover the network by approximating the boundaries between these linear regions, with the only information given about the network being its output on specified queries.

We demonstrate the success of our algorithm in reverse-engineering both trained and untrained ReLU networks.

Each of these contributions significantly advances the state of the art. No prior work has, to our knowledge, been able to deduce even the first layer of a fully-connected network with 2 hidden layers. By contrast, our theoretical results and algorithm hold for reverse-engineering any layer of a network of any depth. Furthermore, we show empirically that our algorithm is able to reconstruct the first layer of 2-, 3-, and 4-layer networks, as well as the second layer of 2-layer networks.

Related work

Various works within the deep learning literature have considered the problem of inferring a network given its output on inputs drawn (non-adaptively) from a given distribution. It is known that this problem is in general hard (Goel et al., 2017), though positive results have been found for certain specific choices of distribution in the case that the network has only one or two layers (Ge et al., 2019; Goel & Klivans, 2017). By contrast, we consider the problem of reconstructing a network of arbitrary depth, given the ability to issue queries at specified input points. In this work, we leverage the theory of linear regions within a ReLU network, an area studied e.g. by Telgarsky (2015); Raghu et al. (2017); Hanin & Rolnick (2019a). Most recently, Hanin & Rolnick (2019b) considered the boundaries between linear regions as arrangements of “bent hyperplanes”. Milli et al. (2019); Jagielski et al. (2019) show the effectiveness of this strategy for networks with one hidden layer. For inference of other properties of unknown networks, see e.g. Oh et al. (2019).

Neuroscientists have long considered similar problems with biological neural networks, albeit armed with prior knowledge about network structure. For example, it is believed that complex cells in the primary visual cortex, which are often seen as translation-invariant edge detectors, obtain their invariance through what is effectively a two-layer neural network (Kording et al., 2004). A first layer is believed to extract edges, while a second layer essentially implements max-pooling. Many biological neurons appear to be well modeled as the ReLU of a linear combination of their inputs (Chance et al., 2002). Heggelund (1981) perform physical experiments akin to our approach of identifying one ReLU at a time, by applying inputs that move individual neurons above their critical threshold one by one. Being able to solve such problems more generically would be useful for a range of neuroscience applications.

Theoretical framework

Permutation. The order of neurons in each layer of a network N\mathcal{N} does not affect the underlying function. Formally, let pk,σ(N)p_{k,\sigma}(\mathcal{N}) be the network obtained from N\mathcal{N} by permuting layer kk according to σ\sigma (along with the corresponding weight vectors and biases). Then, pk,σ(N)p_{k,\sigma}(\mathcal{N}) is isomorphic to N\mathcal{N} for every layer kk and permutation σ\sigma.

Scaling. Due to the ReLU’s equivariance under multiplication, it is possible to scale the incoming weights and biases of any neuron, while inversely scaling the outgoing weights, leaving the overall function unchanged. Formally, for zz the iith neuron in layer kk and for any c>0c>0, let sz,c(N)s_{z,c}(\mathcal{N}) be the network obtained from N\mathcal{N} by replacing W⋅ik{\bf W}^{k}_{\cdot i}, bik{\bf b}^{k}_{i}, and Wk+1{\bf W}^{k+1} by cW⋅ikc{\bf W}^{k}_{\cdot i}, cbikcb^{k}_{i}, and (1/c)Wi⋅k+1(1/c){\bf W}^{k+1}_{i\cdot}, respectively. It is simple to prove that sz,c(N)s_{z,c}(\mathcal{N}) is isomorphic to N\mathcal{N} (see Appendix A).

It is worth noting that permutation and scaling are isomorphisms for every ReLU network, but some networks may have additional isomorphisms. It is shown in Phuong & Lampert (2019) that there exist ReLU networks of every architecture for which all isomorphisms are given by some combination of permutation and scaling.See also Fefferman (1994) for a proof that an analogous set of isomorphisms is comprehensive for networks with tanh activation. As we demonstrate in §5.2, there exists a positive-measure set of ReLU networks with additional isomorphisms.

In this work, we show that, where additional isomorphisms do not occur, it is in fact often possible both in theory and in practice to reverse-engineer ReLU networks up to permutation and scaling.

2 Linear regions

Throughout this paper, we will make the Linear Regions Assumption: Each region represents a maximal connected component of input space on which the piecewise linear function N(x)\mathcal{N}({\bf x}) is given by a single linear function. While this assumption has tacitly been made in the prior literature, it is noted in Hanin & Rolnick (2019b) that there are cases where it does not hold. For example, if an entire layer of the network is zeroed out for some inputs, then N(x)\mathcal{N}({\bf x}) may be given by the same linear function across several adjacent regions, despite these regions corresponding to different ReLU activation patterns.

3 Main result

Let N\mathcal{N} be a fully connected ReLU network satisfying the Linear Regions Assumption. Then, the following statement holds except for N\mathcal{N} in a measure-zero set of networks: For every neuron zz, the boundary BzB_{z} bends exactly where it intersects a boundary Bz′B_{z^{\prime}} such that z′z^{\prime} is in an earlier layer than zz.

From this theorem, it follows that for any two intersecting boundaries BzB_{z} and Bz′B_{z^{\prime}}, one of the following must hold: BzB_{z} bends at their intersection (in which case zz occurs in a deeper layer of the network), Bz′B_{z^{\prime}} bends (in which case z′z^{\prime} occurs in a deeper layer), or neither bends (in which case zz and z′z^{\prime} occur in the same layer). It is not possible for both BzB_{z} and Bz′B_{z^{\prime}} to bend at their intersection – unless that intersection is also contained in another boundary, which is vanishingly unlikely in general. Therefore, the architecture of the network can be determined by evaluating the boundaries BzB_{z} and where they bend in relation to one another.

In fact, a much stronger statement holds; namely, the weights and biases of the network can also be determined from the boundaries:

Let N\mathcal{N} be a fully connected ReLU network satisfying the Linear Regions Assumption. Suppose that for any two neurons zz and z′z^{\prime} that are connected in N\mathcal{N}, the boundaries BzB_{z} and Bz′B_{z^{\prime}} intersect. Then, given the set of boundaries between linear regions, it is possible to recover both the complete architecture of N\mathcal{N} and the weights and biases of every hidden layer, up to permutation and scaling, except for N\mathcal{N} in a measure-zero set of networks.

This result follows from Theorem 3, which states that not only is it possible to recover the structure and weights of a network from the boundaries between linear regions, but the boundaries themselves can effectively be approximated by the algorithm we describe in §4, enabling the network to be reverse-engineered merely by querying it. We prove Theorem 3 in Appendix C.

As an intuition for why Theorem 2 holds, observe first that for neurons zz in the first layer of the network, the boundaries BzB_{z} are simply hyperplanes (see Fig. 1). The equations of these hyperplanes reveal the weights from the input to the first layer (up to permutation, scaling, and sign). For each subsequent layer, the weight between neurons zz and z′z^{\prime} can be determined by calculating how Bz′B_{z^{\prime}} bends when it crosses BzB_{z}, as this dictates how much the input to zz changes when neuron z′z^{\prime} is zeroed out by its ReLU.

Algorithm

We now describe an algorithm to reverse-engineer a network N\mathcal{N} by approximating the boundaries between linear regions. Our algorithm assumes that the output of the network N(x)\mathcal{N}({\bf x}) can be queried for different inputs x{\bf x}, but does not assume any a priori knowledge of the linear regions or boundaries.

We begin by identifying the first layer of the network N\mathcal{N}, for which we must infer the number of neurons, the weight matrix W1{\bf W}^{1}, and the bias vector b1{\bf b}^{1}. As noted above, for each z=zi1z=z_{i}^{1} in the first layer, the boundary BzB_{z} is a hyperplane with equation W⋅i1x+bi1=0{\bf W}^{1}_{\cdot i}{\bf x}+{\bf b}^{1}_{i}=0. For each neuron zz in a later layer of the network, the boundary BzB_{z} will, in general, bend and not be a (full) hyperplane (Theorem 1). We may therefore find the number of neurons in layer 1 by counting the hyperplanes contained in the network’s boundary BB, and we can infer weights and biases by determining the equations of these hyperplanes.

Inferring hyperplanes. We now fit a hyperplane to each of the boundary points we have identified. For each p∈P1{\bf p}\in P_{1}, there is a neuron zz such that p∈Bz{\bf p}\in B_{z}. The boundary BzB_{z} is piecewise linear, with nonlinearities only along other boundaries, and with probability 11, p{\bf p} does not lie on a boundary besides BzB_{z}. Therefore, within a small enough neighborhood of p{\bf p}, BzB_{z} is given by a hyperplane, which we call the local hyperplane at p{\bf p}. If zz is in layer 1, then BzB_{z} equals the local hyperplane. The subroutine InferHyperplane takes as input a point p{\bf p} on a boundary BzB_{z} and approximates the local hyperplane within which p{\bf p} lies. This algorithm proceeds by sampling many small line segments around p{\bf p}, running PointsOnLine to find their points of intersection with BzB_{z}, and performing linear regression to find the equation of the hyperplane containing these points.

Testing hyperplanes. Not all of the hyperplanes we have identified are actually boundaries for neurons in layer 1, so we need to test which hyperplanes are contained in BB in their entirety, and which are the local hyperplanes of boundaries that bend. The subroutine TestHyperplane takes as input a point p{\bf p} and a hyperplane HH containing that point, and determines whether the entire hyperplane HH is contained in the boundary BB of the network. This algorithm proceeds by sampling points within HH that lie far from p{\bf p} and applying PointsOnLine to a short line segment around each such point to check whether these points all lie on BB. Applying TestHyperplane to those hyperplanes inferred in the preceding step allows us to determine those BzB_{z} for which zz is in layer 1.

From hyperplanes to parameters. Finally, we identify the first layer of N\mathcal{N} from the equations of hyperplanes contained in BB. The number of neurons in layer 1 is given simply by the number of distinct BzB_{z} that are hyperplanes. As we have observed, for z=zi1z=z_{i}^{1} in layer 1, the hyperplane BzB_{z} is given by W⋅i1x+bi1=0{\bf W}^{1}_{\cdot i}{\bf x}+{\bf b}^{1}_{i}=0. We can thus determine W⋅i1{\bf W}^{1}_{\cdot i} and bi1{\bf b}^{1}_{i} up to multiplication by a constant. However, we have already observed that scaling W⋅i1{\bf W}^{1}_{\cdot i} and bi1{\bf b}^{1}_{i} by a positive constant (while inversely scaling Wi⋅2{\bf W}^{2}_{i\cdot}) is a network isomorphism (§3.1). Therefore, we need only determine the true sign of the multiplicative constant, corresponding to determining which side of the hyperplane is zeroed out by the ReLU. This determination of sign will be performed in §4.2.

2 Additional layers

We now assume that the weights W1,…,Wk−1{\bf W}^{1},\ldots,{\bf W}^{k-1} and biases b1,…,bk−1{\bf b}^{1},\ldots,{\bf b}^{k-1} have already been determined within the network N\mathcal{N}, with the exception of the sign choice for weights and biases at each neuron in layer k−1k-1. We now show how it is possible to determine the weights Wk{\bf W}^{k} and biases bk{\bf b}^{k}, along with the correct signs for Wk−1{\bf W}^{k-1} and bk−1{\bf b}^{k-1}.

Closest boundary along a line. In this part of our algorithm, we will need the ability to move along a boundary to its intersection with another boundary. For this purpose, the subroutine ClosestBoundary will be useful. It takes as input a point p{\bf p}, a vector v{\bf v} and the network parameters as determined up to layer k−1k-1, and outputs the smallest c>0c>0 such that q=p+cv{\bf q}={\bf p}+c{\bf v} lies on BzB_{z} for some zz in layer at most k−1k-1. In order to compute cc, we consider the region RR within which p{\bf p} lies, which is associated with a certain pattern of active and inactive ReLUs. For each boundary BzB_{z}, we calculate the hyperplane equation which would define BzB_{z} were it to intersect RR, due to the fixed activation pattern within RR, and we calculate the distance from p{\bf p} to this hyperplane. While not every boundary BzB_{z} intersects RR, the closest boundary does, allowing us to find the desired cc.

Unused boundary points. In order to identify the boundaries BzB_{z} for zz in layer kk, we wish to identify a set of boundary points with at least one on each such boundary. However, in previous steps of our algorithm, a set Pk−1P_{k-1} of boundary points was created, of which some were used in ascertaining the parameters of earlier layers. We now consider the subset Pk⊂Pk−1P_{k}\subset P_{k-1} of points that were not found to belong to BzB_{z}, for zz in layers 11 through k−1k-1. These points have already had their local hyperplanes determined.

Exploring boundary intersections. Consider a point p1∈Pk{\bf p}_{1}\in P_{k} such that p1∈Bz{\bf p}_{1}\in B_{z}. Note that BzB_{z} will, in general, have nonlinearities where it intersects Bz′B_{z^{\prime}} such that z′z^{\prime} lies in an earlier layer than zz. We explore these intersections, and in particular attempt to find a point of Bz∩Bz′B_{z}\cap B_{z^{\prime}} for every z′z^{\prime} in layer k−1k-1. Given the local hyperplane HH at p1{\bf p}_{1}, we pick a direction v{\bf v} along HH and apply ClosestBoundary to calculate the closest point of intersection p′{\bf p}^{\prime} with Bz′B_{z^{\prime}} for all z′z^{\prime} already identified in the network. (We discuss below how to pick v{\bf v}.) Note that if zz is in layer kk, then p′{\bf p}^{\prime} must be on BzB_{z} as well as Bz′B_{z^{\prime}}, while if zz is in a later layer of the network, then there may exist unidentified neurons in layers below zz and therefore BzB_{z} may bend before meeting Bz′B_{z^{\prime}}. We check if p′{\bf p}^{\prime} lies on BzB_{z} by applying PointsOnLine, and if so apply InferHyperplane to calculate the local hyperplane of BzB_{z} on the other side of Bz′B_{z^{\prime}} from p1{\bf p}_{1}. We select a representative point p2{\bf p}_{2} on this local hyperplane. We repeat the process of exploration from the points p1,p2,…{\bf p}_{1},{\bf p}_{2},\ldots until one of the following occurs: (i) a point of Bz∩Bz′B_{z}\cap B_{z^{\prime}} has been identified for every z′z^{\prime} in layer k−1k-1 (this may be impossible; see §5.2), (ii) zz is determined to be in a layer deeper than kk (as a result of p′{\bf p}^{\prime} not lying on BzB_{z}), or (iii) a maximum number of iterations has been reached.

How to explore. An important step in our algorithm is exploring points of BzB_{z} that lie on other boundaries. Given a set of points Az={p1,p2,…,pm}A_{z}=\{{\bf p}_{1},{\bf p}_{2},\ldots,{\bf p}_{m}\} on BzB_{z}, there are several methods for picking a point pi{\bf p}_{i} and direction v{\bf v} along the local hyperplane at pi{\bf p}_{i} to apply ClosestBoundary. One approach is to pick a random point pi{\bf p}_{i} from those already identified and a random direction v{\bf v}; this has the advantage of simplicity. However, it is somewhat faster to consider for which z′z^{\prime} the intersection Bz∩Bz′B_{z}\cap B_{z^{\prime}} has not yet been identified and attempt specifically to find points on these intersections. One approach for this is to pick a missing z′z^{\prime} and identify for which pi{\bf p}_{i} the boundary Bz′B_{z^{\prime}} lies on the boundary of the region containing pi{\bf p}_{i} and solve a linear program to find v{\bf v}. Another approach is to pick a missing z′z^{\prime} and a point pi{\bf p}_{i}, calculate the hyperplane HH which would describe Bz′B_{z^{\prime}} under the activation pattern of pi{\bf p}_{i}, and choose v{\bf v} along the local hyperplane to pi{\bf p}_{i} such that the distance to HH is minimized. This is the approach which we take in our implementation, though more sophisticated approaches may exist and present an interesting avenue for further work.

From boundaries to parameters. We now identify layer kk of N\mathcal{N}, along with the sign of the parameters of layer k−1k-1, by measuring the extent to which boundaries bend at their intersection. We are also able to identify the correct signs at layer k−1k-1 by solving an overconstrained system of constraints capturing the influence of neurons in layer k−1k-1 on different regions of input space. Theorem 3 formalizes the inductive step that allows us to go from what we know at layer k−1k-1 (weights and biases, up to scaling and sign) to the equivalent set of information for layer kk.

Discussion

The following theorem (proven in Appendix C) establishes the validity of our algorithm above.

The above algorithm successfully recovers, up to permutation and scaling, the structure and weights of any deep ReLU network for which the assumptions of Theorem 2 hold. No prior knowledge of the weights, structure, or linear region boundaries is assumed, merely the ability to query the network.

Specifically, the following holds true for fully connected ReLU networks N\mathcal{N} satisfying the Linear Region Assumption (§3.2), excluding a set of networks with measure zero: Suppose that the weights and biases of N\mathcal{N} are known up through layer k−1k-1, with the exception that for each neuron in layer k−1k-1, the sign of the incoming weights and the bias is unknown. Suppose also that for each zz in layer kk, there exists an ordered set of points Az={p1,p2,…,pm}A_{z}=\{{\bf p}_{1},{\bf p}_{2},\ldots,{\bf p}_{m}\} such that: (i) Each point lies on the boundary of BzB_{z}, and in (the interior of) a distinct region with respect to the earlier-layer boundaries already known; (ii) each point (except for p1{\bf p}_{1}) has a precursor in an adjacent region; (iii) for each such pair of points, the local hyperplanes of BzB_{z} are known, as is the boundary Bz′B_{z^{\prime}} dividing them (z′z^{\prime} in an earlier layer); (iv) the set of such z′z^{\prime} includes all of layer k−1k-1.

Then, it is possible to recover the weights and biases for layer kk, with the exception that for each neuron, the sign of the incoming weights and the bias is unknown. It is also possible to recover the sign for every neuron in layer k−1k-1.

Note that even when assumption (iv) of the Theorem is violated, the algorithm recovers the weights corresponding to whichever boundaries are successfully crossed, as we verify empirically in §6.

We expect the number of queries necessary to obtain weights and biases (up to sign) for the first layer should grow as O(nin(∑ini)log⁡n1)O(n_{\text{in}}(\sum_{i}n_{i})\log n_{1}), which for constant-width networks is only slightly above the number of parameters being inferred. Namely, if the biases in the network are bounded above, then each sufficiently long line has constant probability of hitting a given hyperplane, suggesting log⁡n1\log n_{1} lines are required according to a coupon collector-style argument. Hanin & Rolnick (2019a) prove that under natural assumptions, the number of boundary points intersecting a given line through input space grows linearly in the total number of neurons in the network. Finally, each boundary point on a line requires O(nin)O(n_{\text{in}}) queries in order to fit a hyperplane.

For deeper layers, the number of queries depends on the approach taken to explore the intersections between boundaries. It is possible, depending on the arrangement of intersections, for the number of queries to grow linearly in the number of parameters, as each weight can be inferred by examining a single intersection between boundaries.

2 Assumptions

It is possible that for some neurons zz and z′z^{\prime} in consecutive layers, there is no point of intersection between the boundaries BzB_{z} and Bz′B_{z^{\prime}} (or that this intersection is very small), making it impossible to infer the weight between zz and z′z^{\prime} by our algorithm. Some such cases represent an ambiguity in the underlying network – an additional isomorphism to those described in §3.1. Namely, Bz∩Bz′B_{z}\cap B_{z^{\prime}} is empty if one of the following cases holds: (1) whenever zz is active, z′z^{\prime} is inactive; (2) whenever zz is active, z′z^{\prime} is active; (3) whenever zz is inactive, z′z^{\prime} is inactive; or (4) whenever zz is inactive, z′z^{\prime} is active. In case 1, observe that a slight perturbation to the weight ww between zz and z′z^{\prime} has no effect upon the network’s output; thus ww is not uniquely determined. Cases 2-4 present a more complicated picture; depending on the network, there may or may not be additional isomorphisms.

For simplicity in our algorithm, we have not considered the relatively rare cases where boundaries BzB_{z} are disconnected or bounded. If BzB_{z} is disconnected, then it may not be possible to find a connected path along it that intersects all boundaries arising from the preceding layer. In this case, it is simple to infer that two independently identified pieces of the boundary belong to the same neuron to infer the full weight vector. Next, if BzB_{z} is bounded for some zz, then it is a closed (d−1)(d-1)-dimensional surface within dd-dimensional input spaceFor 2D input, such BzB_{z} must be topological circles, but for higher dimensions, it is conceivable for them to be more complicated surfaces, such as toroidal polyhedra.. While our algorithm requires no modification in this case, bounded BzB_{z} may be more difficult to find by intersection with randomly chosen lines, and a more principled sampling method may be helpful.

3 Other architectures

While we have expressed our algorithm in terms of multi-layer perceptrons with ReLU activation, it also extends to various other architectures of neural network. Other piecewise linear activation functions admit similar algorithms. For a network with convolutional layers, it is possible to use the same approach to infer the weights between neurons, with two caveats: (i) As we have stated it, the algorithm does not account for weight-sharing – the number of “neurons” in each layer is thus dependent on the input size, and is very large for reasonably sized images. (ii) Pooling layers do affect the partition into activation regions, and indeed introduce new discontinuities into the gradient; our algorithm therefore does not apply.

For skip connections as in ResNets (He et al., 2016), our algorithm should hold with slight modifications, which we outline here. As in a multi-layer perceptron, each boundary component BzB_{z} is a bent hyperplane that bends when it intersects Bz′B_{z^{\prime}} for z′z^{\prime} at an earlier layer than zz. However, potential weights must in this case be considered between neurons in any two different layers. Deriving the weights for such skip connections is somewhat more complex than for multi-layer perceptrons, as the “bend” is influenced not merely by the skip connection but by the weights along all other paths between the two neurons through the network. Thus, it is necessary to “move backward” through the network – for a neuron in layer kk, one must first derive the weights of connections arising from the preceding layer k−1k-1, then from k−2k-2, and so on.

Experiments

We demonstrate the success of our algorithm on both untrained and trained networks. In keeping with literature on ReLU network initialization (He et al., 2015; Hanin & Rolnick, 2018), networks were initialized using i.i.d. normal weights with variance 2/fan-in2/\text{fan-in} and i.i.d. normal biases with unit variance. Networks were trained on either the MNIST dataset (nin=784,nout=10n_{\text{in}}=784,n_{\text{out}}=10) or a memorization task of 1000 “datapoints” (nin=10,nout=2n_{\text{in}}=10,n_{\text{out}}=2) with coordinates drawn i.i.d. from a unit Gaussian and given arbitrary binary labels. Training was performed using the Adam optimizer (Kingma & Ba, 2014) and a cross-entropy loss applied to the softmax of the final layer, over 20 epochs for MNIST and 1000 epochs for the memorization task. The trained networks (when sufficiently large) were able to attain near-perfect accuracy.

We observe that both the first-layer algorithm and additional-layer algorithm identified weights and biases to within extremely high accuracy (see Figs. 3 and 4). In order to compare estimated and true parameters, we scaled weights at each neuron to unit norm and accounted for possible permutations of the neurons within a layer. (As described in §3.1, these transformations do not change the function computed by the network and represent unavoidable isomorphisms in recovering the network.) Figures show the log normalized error log⁡(∣∣W^k−Wk∣∣2/∣∣Wk^∣∣2)\log(||\hat{{\bf W}}^{k}-{\bf W}^{k}||_{2}/||\hat{{\bf W}^{k}}||_{2}) between true weights Wk{\bf W}^{k} and approximated weights W^k\hat{{\bf W}}^{k} and likewise the log normalized error log⁡(∣∣b^k−bk∣∣2/∣∣bk^∣∣2)\log(||\hat{{\bf b}}^{k}-{\bf b}^{k}||_{2}/||\hat{{\bf b}^{k}}||_{2}) between true biases bk{\bf b}^{k} and approximated weights b^k\hat{{\bf b}}^{k}.

In keeping with our analysis in §5.1, the number of queries needed to recover the first layer of a network scales linearly with the number of neurons in that layer (Fig. 3). In the second layer, a small fraction of weights are sometimes not identified (see §5.2 for a discussion of reasons why such behavior is inevitable); even in such cases, the algorithm is able to correctly predict the remaining parameters (Fig. 4).

Conclusion

In this work, we have proven that it is possible to recover the architecture, weights, and biases of deep ReLU networks from the boundaries between linear regions defined by the network. In many cases, we show that it is possible to reconstruct these boundaries and thus the network itself merely by querying the network’s output on certain inputs. Networks can, we observe, often be reconstructed unambiguously up to permutation of neurons within each layer and scaling of weights and biases at individual neurons. In some cases, there are additional isomorphisms, in which case our algorithm is able to reconstruct a significant fraction of the parameters of the network.

Our approach works for a wide variety of networks, though not all. It is limited to ReLU or otherwise piecewise linear activation functions, though we believe it possible that a continuous version of this method could potentially be developed in future work for use with sigmoidal activation. If used with convolutional layers, our method does not account for the symmetries of the network and therefore scales with the size of the input as well as the number of features, resulting in high computation. Finally, the method is not robust to defenses such as adding noise to the outputs of the network, and therefore can be thwarted by a network designer that seeks to hide their weights/architecture.

We believe that the methods we have introduced here will lead to considerable advances in reverse-engineering neural networks, both in the context of deep learning and, more speculatively, in neuroscience. While the implementation we have demonstrated here is effective in small instances, we anticipate future work that optimizes these methods for efficient use with different architectures and at scale.

References

Appendix A Isomorphism under scaling

Given a fully connected ReLU network N\mathcal{N}, the network sz,c(N)s_{z,c}(\mathcal{N}) is isomorphic to N\mathcal{N} for every neuron zz and constant c>0c>0.

Suppose that z=zikz=z_{i}^{k} is the iith neuron in layer kk. Then, for each neuron zjk+1z_{j}^{k+1} in layer k+1k+1 of the network N\mathcal{N}, we have:

By comparison, in network sz,c(N)s_{z,c}(\mathcal{N}), we have:

where we used the property that ReLU⁡(cx)=cReLU⁡(x)\operatorname{ReLU}(cx)=c\operatorname{ReLU}(x) for any c>0c>0.

As expressions (1) and (2) are equal, we conclude that sz,c(N)s_{z,c}(\mathcal{N}) is isomorphic to N\mathcal{N}.

Appendix B Proof of Theorem 1

It is observed in Hanin & Rolnick (2019b) that BzB_{z} cannot bend except at points of intersection with Bz′B_{z^{\prime}} for z′z^{\prime} in an earlier layer than zz. We now prove the converse. Suppose that neurons z,z′z,z^{\prime} are such that z′z^{\prime} lies in an earlier layer than zz. Consider a point p{\bf p} of intersection between BzB_{z} and Bz′B_{z^{\prime}}, and suppose that p1{\bf p}_{1} and p2{\bf p}_{2} are in an arbitrarily small neighborhood of p{\bf p}, lying on opposite sides of Bz′B_{z^{\prime}}. It suffices to prove that ∇z(p1)≠∇z(p2)\nabla z({\bf p}_{1})\neq\nabla z({\bf p}_{2}), and therefore that BzB_{z} bends as it intersects Bz′B_{z^{\prime}}.

Appendix C Proof of Theorem 3

In this proof, we will show how the information we are given by the assumptions of the theorem is enough to recover the weights and biases for each neuron zz in layer kk. We will proceed for each zz individually, progressively learning weights between zz and each of the neurons in the preceding layer (though for skip connections this procedure could also easily be generalized to learn weights from zz to earlier layers).

For each of the points pi∈Az{\bf p}_{i}\in A_{z}, suppose that HiH_{i} is the local hyperplane associated with pi{\bf p}_{i} on boundary BzB_{z}. The gradient ∇z(pi)\nabla z({\bf p}_{i}) at pi{\bf p}_{i} is orthogonal to HiH_{i}, and we thus already know the direction of the gradient, but its magnitude is unknown to us. We will proceed in order through the points p1,p2,…,pm{\bf p}_{1},{\bf p}_{2},\ldots,{\bf p}_{m}, with the goal of identifying ∇z(pi)\nabla z({\bf p}_{i}) for each pi{\bf p}_{i}, up to a single scaling factor, as this computation will end up giving us the incoming weights for zz.

We begin with p1{\bf p}_{1} by assigning ∇z(p1)\nabla z({\bf p}_{1}) arbitrarily to either one of the two unit vectors orthogonal to HiH_{i}. Due to scaling invariance (Lemma 1), the weights of N\mathcal{N} can be rescaled without changing the function so that ∇z(pi)\nabla z({\bf p}_{i}) is multiplied by any positive constant. Therefore, our arbitrary choice can be wrong at most in its sign, and we need not determine the sign at this stage. Now, suppose towards induction that we have identified ∇z(pi)\nabla z({\bf p}_{i}) (up to sign) for i=1,…,s−1i=1,\ldots,s-1. We wish to identify ∇z(ps)\nabla z({\bf p}_{s}).

By assumption (ii), there exists a precursor pr{\bf p}_{r} to ps{\bf p}_{s} such that HrH_{r} and HsH_{s} intersect on a boundary Bz′B_{z^{\prime}}. Let vr=tz∇z(pr){\bf v}_{r}=t_{z}\nabla z({\bf p}_{r}) be our estimate of ∇z(pr)\nabla z({\bf p}_{r}), for unknown sign tz∈{+1,−1}t_{z}\in\{+1,-1\}. Let vs{\bf v}_{s} be a unit normal vector to HsH_{s}, so that vs=ctz∇z(ps){\bf v}_{s}=ct_{z}\nabla z({\bf p}_{s}) for some unknown constant cc. We pick the sign of vs{\bf v}_{s} so that it has the same orientation as vr{\bf v}_{r} with respect to the surface BzB_{z}, and thus c>0c>0. Finally, let v=tz′∇z′(pr)=tz′∇z′(ps){\bf v}=t_{z^{\prime}}\nabla z^{\prime}({\bf p}_{r})=t_{z^{\prime}}\nabla z^{\prime}({\bf p}_{s}) be our estimate of the gradient of z′z^{\prime}; where tz′∈{+1,−1}t_{z^{\prime}}\in\{+1,-1\} is also an unknown sign (recall that since z′z^{\prime} is in layer k−1k-1 we know its gradient up to sign). We will use v{\bf v} and vr{\bf v}_{r} to identify vs{\bf v}_{s}.

Suppose that z=zjkz=z_{j}^{k} is the jjth neuron in layer kk and that z′=zhk−1z^{\prime}=z_{h}^{k-1} is the hhth neuron in layer k−1k-1. Recall that

As Bz′B_{z^{\prime}} is the boundary between inputs for which z′=zhk−1z^{\prime}=z_{h}^{k-1} is active and inactive, ReLU⁡(zhk−1(x)+bhk−1)\operatorname{ReLU}(z_{h}^{k-1}({\bf x})+{\bf b}^{k-1}_{h}) must equal zero either (Case 1) on HrH_{r} or (Case 2) on HsH_{s}.

Since we know the vectors vs,vr,v{\bf v}_{s},{\bf v}_{r},{\bf v}, we are able to deduce the constant cc.

giving rise to the same value of cc. We thus may complete our induction. In the process, observe that we have calculated a constant Whjktztz′t′{\bf W}^{k}_{hj}t_{z}t_{z^{\prime}}t^{\prime}, where the sign t′t^{\prime} is +1+1 in Case 1 and −1-1 in Case 2. Note that tz′t′t_{z^{\prime}}t^{\prime} can be calculated based on whether v{\bf v} points towards pr{\bf p}_{r} or ps{\bf p}_{s}. Therefore, we have obtained Whjktz{\bf W}^{k}_{hj}t_{z}, which is exactly the weight (up to zz-dependent sign) that we wished to find. Once we have all weights incoming to zz (up to sign), it is simple to identify the bias for this neuron (up to sign) by calculating the equation of any known local hyperplane for BzB_{z} and using the known weights and biases from earlier layers.

To complete the proof, we must now also calculate the correct signs tz′t_{z^{\prime}} of the neurons in layer k−1k-1. Pick some z=zjkz=z_{j}^{k} in layer kk and observe that for all points ps∈Az{\bf p}_{s}\in A_{z} there corresponds an equation, obtained by taking gradients in equation (3):

where \mathds1i,s\mathds{1}_{i,s} equals 11 if ps{\bf p}_{s} is on the active side of Bzik−1B_{z_{i}^{k-1}}. We can substitute in our (sign-unknown) values for these various quantities:

Now, we may estimate \mathds1i,s\mathds{1}_{i,s} by a function \mathds1i,s′\mathds{1}^{\prime}_{i,s} that is 1 if ps{\bf p}_{s} and vi{\bf v}_{i} are on the same side of Bzik−1B_{z_{i}^{k-1}}. This estimate will be wrong exactly when tzik−1=−1t_{z_{i}^{k-1}}=-1. Thus, \mathds1i,s=(1+tzik−1\mathds1i,s′)/2\mathds{1}_{i,s}=(1+t_{z_{i}^{k-1}}\mathds{1}^{\prime}_{i,s})/2, giving us the equation:

All the terms of this equation are known, with the exception of tzt_{z} and the nk−1n_{k-1} variables tzik−1t_{z_{i}^{k-1}} – giving us a linear system in nk−1+1n_{k-1}+1 variables. For a given zjkz_{j}^{k}, there are nk−1n_{k-1} different ps{\bf p}_{s} representing the intersections with Bz′B_{z^{\prime}} for each z′z^{\prime} in layer k−1k-1; choosing these ps{\bf p}_{s} should in general give linearly independent constraints. Moreover, the equation is in fact a vector equality with dimension ninn_{\text{in}}; hence, it is a highly overconstrained system, enabling us to identify the signs tzik−1t_{z_{i}^{k-1}} for each zik−1z_{i}^{k-1}. This completes the proof of the theorem.