S: Sign-Sparse-Shift Reparametrization for Effective Training of Low-bit Shift Networks
Year: 2022

Abstract:
Shift neural networks reduce computation complexity by removing expensive multiplication operations and quantizing continuous weights into low-bit discrete values, which are fast and energy-efficient compared to conventional neural networks. However, existing shift networks are sensitive to the weight initialization and yield a degraded performance caused by vanishing gradient and weight sign freezing problem. To address these issues, we propose S re-parameterization, a novel technique for training low-bit shift networks. Our method decomposes a discrete parameter in a sign-sparse-shift 3-fold manner. This way, it efficiently learns a low-bit network with weight dynamics similar to full-precision networks and insensitive to weight initialization. Our proposed training method pushes the boundaries of shift neural networks and shows 3-bit shift networks compete with their full-precision counterparts in terms of top-1 accuracy on ImageNet.

heading: 1 Introduction
text: While deep neural networks (DNNs) have achieved widely success in various tasks, the training and inference of DNNs usually cost prohibitive resources due to the fact that they are often overparametrized and composed of computational costly multiplication operations for both forward and backward propagation [28]. To enable the application feasibility of DNNs in resource-constrained scenarios, substantial efforts have been made to reduce the computation complexity of neural networks while preserving their accuracy. Among different proposed approaches for this purpose, low-bit neural networks with binary weights [6, 22] or ternary weights [15] are recently designed to replace the expensive operations like multiplication with cheaper ones, e.g., replacing multiplication with sign flip operation during inference.
We focus on low-bit shift neural networks [11, 9, 30] that replace multiplication with the bit-shift operation. Following the conventional linear algebra notations, we denote scalars by x, vectors in bold small letters x, and matrices by bold capital letters X. Traditional neural networks require computing the inner product w>x = ∑ i wixi, where w is the weight vector and x is the feature vector. In comparison, shift neural networks limit the values of the weight vectors to a set of discrete values wshift ∈ {0} ∪ {±2p}. In this case, multiplication can be replaced with bit-shift operations, as multiplying wi = 2p is equavilent to shifting p places to the left (if p is positive) or to the right (if p is negative). The bit-shift operation alone only covers discrete neural networks with positive weights, therefore, most shift neural networks further add a sign flip operation to the shift to allow wi = {±2p}. Inference with bit-shift operations is highly hardware friendly and can save up to 196× energy cost on FPGA and 24× on ASIC compare to their multiplication counterparts [28]. Several works aim to further improve the memory efficiency of shift neural networks by reducing the bit-width of the weights. Zhou et al. [30] propose to fine-tune pre-trained full-precision weights
35th Conference on Neural Information Processing Systems (NeurIPS 2021).
with a progressive power-of-two weight quantization strategy. They suggest to keep a portion of weights unquantized during fine-tuning to improve model performance. DeepShift [9] is the state-ofthe-art technique for training low-bit shift networks from random initialization. Initialization with pre-trained full-precision weights provides a significant performance gain for DeepShift. All latest techniques heavily rely on the initialization of full-precision pre-trained weights, which implies some optimization difficulties exist in the current training diagram of low-bit shift networks. However, although extremely memory efficient and hardware friendly, low-bit shift networks suffer from a significant accuracy drop on large datasets compared to their full-precision counterpart, and the performance of them is sensitive to weight initialization.
To address these problems, in this work, we analyze the current training diagram of low-bit shift neural networks, and find that the accuracy degradation and the weight initialization sensitivity of the low-bit shift networks are caused by the design flaw of the weight quantizer during training. Specifically, training shift neural networks is different from training full-precision networks. The gradient-based optimization algorithms are designed for optimizing continuous variables, but the weights of shift neural networks are discrete values. To learn the discrete weights with a gradient-based approach, it is necessary to exploit weight re-parameterization. One of the most widely adopted discrete weight re-parameterization technique is using a quantizer function to map a continuous parameter w ∈ R to a discrete weight w ∈ {v1, v2, · · · , vk} with k possible values. As the weight quantizers are generally non-differentiable functions, a gradient approximator, such as straight-through estimator [3], is utilized to approximate their derivatives during training. Our analysis shows the quantizer leads to a severe gradient vanishing and weight sign freezing.
In this paper, we design an effective training strategy to combat the gradient vanishing and weight sign freezing problem in low-bit shift networks. We first impose a dense weight priori during training, which equals maximizing the `0 norm of the discrete weights. However, optimizing `0 norm during training is a combinatorial problem, instead we propose S3 re-parameterization and regularize the sparsity parameter. S3 is a new technique which re-parameterizes the discrete weights of shift networks in a sign-sparse-shift, a 3-dimensional augmented parameter space to disentangle the roles of quantization values, and hopefully train more effectively thanks to more orthogonal axes in the augmented space. Although our method introduces extra parameters during training, its memory occupation under low-bit is slightly higher than the full-precision network since the additional memory overhead depends on the weight size. In contrast, the activation size dominates the training memory occupation, especially using a large batch size.
We evaluate our approach on the ImageNet dataset. While all previous methods require at least 5-bit weight representation to achieve the same performance as the full-precision neural networks on large datasets such as ImageNet, our experimental results show that our proposed method surpasses all previous methods, pushes this boundary further to 3-bits. Besides, our approach requires no complicated weight initialization or training strategy. Moreover, we define two indices of weight dynamics, named weight sign variation rate (WSVR) and weight low-value rate (WLVR), and compare the trend of these two indices during the training process of different methods. Experiments show that the weight dynamics of the ternary weights trained with our proposed technique better align with the weight dynamics of full-precision weights than trained with a traditional quantizers. This desirable dynamics is caused by our re-parametrization, and is the key to efficient training. We hope that this opens the possibility for methods similar as S3 to be used in training low-bit networks.

heading: 2 Related Works
text: Different approaches have been proposed to reduce the computational complexity of neural networks. A type of the popular multiplication-free neural networks is low-bit neural networks with binary weights [6, 22] or ternary weights [15]. However, they suffer from under-fitting on large datasets, leading to an accuracy gap compared with their full-precision counterparts. Other approaches include replacing multiplication operations with addition operations [5, 25, 26] or bit-shift operations [11, 9, 30]. Although these approaches achieve a low accuracy drop on large datasets, they require higher weight representation bit-width. Other follow-up works try to improve the accuracy of multiplicationfree neural networks by replacing multiplication with both addition and bit-shift operation [28], sum of binary bases [17, 29], or sum of shift kernels [16]. However, their computational cost is high as they use multiple operations per kernel.
Training shift neural networks with discrete weight values is a challenging task. Many weight reparameterization approaches have been proposed to solve the challenge. One way is using stochastic weight [6, 18, 23], but these methods suffer from the slow computation of sampling. Another way is utilizing a quantizer function [6, 22, 15] to map or threshold continuous weights to discrete values. Since the thresholding function is non-differentiable, the backward gradients across the quantizer are approximated by a gradient approximator. The Straight-Through-Estimator (STE) [3] is a popular choice for quantizer gradient approximation.
There are also works study the vanishing gradient problem (VGP) that appears frequently in deep neural network training. [1, 10] point out that the zero values in full-precision weights lead to VGP when training highly pruned neural networks, which eventually jeopardizes the accuracy of the model. [8, 30] suggest to maintain a portion of the full-precision weights during quantized network training for improving the performance of the model. [30] shows that applying progressive quantization on low and high value weights differently can further improve the performance of the trained model. Quantizing high-value weights first and keep more low-value weights remains in full-precision during training helps to achieve a better shift neural network compared with randomly applying progressive quantization strategy on weights regardless their values. This observation coincide with our analysis, and we argue that the performance gain of progressive quantization methods come from the gradient flow preserved by maintaining a portion of full-precision weight during training. However, the study of the negative impacts caused by weight quantizers are still missing. To the best of our knowledge, we are the first to study the VGP caused by weight quantizer design.

heading: 3 Training Low-bit Networks
text: We first introduce the general form of the weight quantizers for discrete weight training, and then explain how quantization function leads to training difficulties. In low-bit networks, including shift networks, the weights are discrete values while usually the gradient-based optimization algorithms are designed for optimizing continuous variables. Specifically, quantizer function is one of the most widely-used approach for training discrete weight neural networks. It maps a continuous weight w to one of the k discrete weight values Q(w) ∈ {v1, v2, · · · , vk}. Several quantizers of low-bit networks [15, 31, 27] and shift networks [9, 30] are in the following form of staircase function:
Q(w) =  v1 w < t1 v2 t1 ≤ w < t2
... vk tk ≤ w
(1)
However, training a quantized neural network with a quantizer function in the form of Equation (1) is challenging due to two issues, vanishing gradient (VGP) and weight sign freezing. We discuss the vanishing gradient issue in section 3.1 and the weight sign freezing issue in section 3.2.

heading: 3.1 Gradient vanishing
text: To clarify further why quantization and VGP are entangled, suppose a ReLU-activated fully-connected layer can be generally formulated as:[
xl+10 , xl+11
] = ReLU( [ W l00 W l 01
W l10 W l 11 ] [ xl0 xl1 ] ) (2)
The gradient update toward xl0 can be calculated as:
∂Loss ∂xl0 = ∂Loss ∂xl+10 ∂xl+10 ∂(W l00x l 0 +W l 01x l 1) W l00 + ∂Loss ∂xl+11 ∂xl+11 ∂(W l10x l 0 +W l 11x l 1)︸ ︷︷ ︸
Derivative of ReLU
W l10 (3)
And the derivative of ReLU is,
∂xl+11 ∂(W l10x l 0 +W l 11x l 1) =
{ 1 W l10x l 0 +W l 11x l 1 > 0
0 W l10x l 0 +W l 11x l 1 ≤ 0
(4)
By observing Equation (3), we can see that the gradient information ∂Loss ∂xl+11 propagating from xl+11 to xl0 vanishes in two distinct situations: i) the corresponding derivative of ReLU is zero. (i.e. the neuron is not activated), and ii) the corresponding weight W l10 is zero. Both scenarios lead to a gradient information loss, and ultimately cause inferior performance even after training convergence. The situation i) is widely known as the Dying ReLU issue caused by the sparse derivative of ReLU. Several ReLU-variants [20, 12] with non-sparse derivatives are developed as remedies.
The VGP caused by the quantizer is similar to the dying ReLU issue. As the first step, we motivate S3 technique on a ternary network and then generalize it further for higher bit shift networks. The ternary quantizer function (1) contributes to situation ii) by mapping a portion of non-zero full-precision weights w to the exact zero value wter = Q(w). This leads to a smaller `0 norm for the discrete weight term wter compared to its full-precision counterpart w, ‖Q(w)‖0 ≤ ‖w‖0. Shift networks exchange the costly multiplication operation with cheap shift operation, so inherently it is a nonuniform quantized network and faces the same problem. The VGP caused by the quantizer is the main optimization difficulty in training shift neural networks as well. This issue appears more severely in low-bit networks which include fewer quantized range with higher sparsity rate.

heading: 3.2 Weight sign freezing
text: Another issue of the low-bit quantizer is the weight sign freezing effect. This effect prevents the weight sign variation and leads to different weight dynamics between the full-precision weights and the low-bit discrete weights.
The weight dynamics of full-precision weights are as follows. In general practice, the weights are initialized with a zero-centred distribution in small variance and trained with `2 regularization, so they stay close to the origin point during training. When the full-precision neural network train with noisy gradient updates, such as an SGD optimizer and a large learning rate at the beginning of training, the weights oscillate around the origin point. With the learning rate decreasing, more and more weights converge to a specific sign representing the corresponding input feature, which correlates to the prediction output. The remaining weights whose input feature is neither positively correlated nor negatively correlated are concentrated in the region close to the origin point to oscillate.
However, we notice that the weight dynamics of low-bit discrete weights trained with quantizer are dramatically different. We train ResNet-20 models with full precision weights and ternary weights using quantizer and compare the histogram variation of the same layer in Fig. 2. Take ternary quantizer [15] as an example. The histogram variation of a ternary weight trained with the quantizer has two peaks. They are symmetric to zero; this is because the positive and negative thresholds of the ternary quantizer attract a large portion of weights oscillating around them and prevent the weights across zero and switching their sign. The intuition of full-precision weight dynamics and the observation from weight histogram comparisons inspire us to design the experiments in section 5.2. Our experiments show that the ternary networks trained with a quantizer have very low WSVR during the whole training process. We call it the weight sign freezing issue.

heading: 4 S3 Re-parameterization
text: We suggest to initialize the networks with dense weight prior, which is equivalent to maximizing the `0 norm of the weight tensors at initialization. We initialize ternary weights away from zero so that VGP is partially solved at early training epochs. Dense weight initialization provide additional benefits for low-capacity models, and encourages training around non-zero weight values. This characteristic empirically increases the model capacity and alleviate under-fitting problem commonly observed in low-bit models.
The remedy proposed at initialization only solves training difficulty at early training. Efficient training over discrete weights still remain slow. As the follow up remedy we propose to re-parameterize the discrete weight of shift networks into a sign-sparse-shift 3-fold manner, we call S3. This reparameterization allows us to regard the low bit network as projection of an augmented space, in which a single parameter takes care sparsity, a single parameter takes care of of switching signs, and another parameters takes care of the weight magnitude. This decomposition has two benefits. First, it promote the weight sign variation by allowing the discrete weight switch between positive and negative values without approaching to zero. Second, it allows to control the amount of sparsity by controlling the sparsity parameter during longer epochs.

heading: 4.1 Ternary network
text: Almost all ternary networks such as [15] are trained with the following quantizer
wter = Q∆(w) =  1 ∆ ≤ w, 0 −∆ ≤ w < ∆, −1 w < −∆.
(5)
We propose to replace the quantizer in the form of (5) with the following S3 re-parameterized counterpart, see Figure 1: wter = 1(wsparse){21(wsign)− 1}, (6) in which 1(·) is the Heaviside function, i.e. 1(x) = 1 if x > 0 and equals zero otherwise. Note that w,wsparse, wsign are full precision parameters, and ternary weights are recovered after passing through the Heavidside function.
The S3 re-parameterization approach for ternary weight training decomposes the discrete ternary weight into two binary parameters, one representing sign, another representing sparsity. Motivated from the ReLU activation, we propose to impose dense weights by penalizing the loss function with the magnitude of negative weights. This is a simple regularization that adds little to training computation and is effective to enforce dense weights.
Rsparse(wsparse) = ‖max(−wsparse, 0)‖1 (7)

heading: 4.2 Shift networks
text: We further generalize our approach toward shift neural networks. Following [9] the discrete weight of shift networks can be decomposed into two parts: a ternary term wter and a scaling term composed of power of 2 numbers 2S that shifts the network S bits wshift = wter2S , shifting to left or right depends on the sign of S ∈ Z.
We apply the decomposedwter = wsignwsparse described in the session 4.1 and re-write shift networks in terms of the decomposed ternary weights. Following [9] we focus on positive S values.The reparameterization for the negative S values can easily be achieved by adding a constant bias to S. We propose to re-parameterize this shift weights as a combination of t binary variables recursively.
S0 = 0, St = 1(wt)(St−1 + 1). (8)
For instance, S3 reparameterizes a 3-bit shift networks whose discrete weight values are wshift ∈ {0,±1,±2,±4} to:
wshift = 2 S21(wsparse){21(wsign)− 1}, (9)
while S2 = 1(w2){1(w1) + 1}, so it reduces to a ternary network for t = 0. Note that in this reparametrization all weights (wsign, wsparse, w1, w2) are trained in full precision. Figure 3 demonstrates forward pass and back propagation using this reparametrization.
Ultimately L(w) = Loss(w) + λR(w) + αRsparse(w)
is optimized, in whichR is the `2 norm and α > 0 is a regularization constant controlling the network sparsity during training.

heading: 5 Experiments
text: In this section, we describe our experiment setup and benchmark S3 re-parameterization over SOTA low-bit DNNs. Then we compare the dynamics of weights with different training paradigms to show our method could better align with the training of full-precision models. Finally, we present ablation studies of the dense weight regularizer and the number of training epochs.

heading: 5.1 Benchmark S3 re-parameterization over SOTA low-bit DNNs
text: Models and datasets. We evaluate our proposed method on ILSVRC2012 [7] dataset with different bit-widths to demonstrate the effectiveness and robustness of our method. We use ResNet-18 and ResNet-50 as our backbone with the same data augmentation and pre-processing strategy proposed in [13]. Following common practice in most previous methods [22, 19, 29], all convolution layers are quantized except for the first one.
Training settings. We train the networks with 200 epochs utilizing the cosine learning rate, and the initial learning rate is 1e-3. The networks are optimized with SGD optimizer, and the momentum and weight decay are set to 0.9 and 1e-4 respectively. The hyper-parameter α of dense weight regularizer is set to 1e-5 without using decay scheduler.
Baselines. We evaluate the proposed approach over two SOTA methods for training low-bit shift networks, including DeepShift [9] and Incremental Network Quantization (INQ) [30]. We also compare the results of shift network to other neural networks with higher computational cost, including multiplication-based ConvNet in full-precision [13] and LqNet [29].
Experiment results. The results summarized in Table 1 and Table 2 show that our method significantly improves the accuracies of low-bit multiplication-free networks. Our proposed method on the 3-bit shift networks has the most exciting result: it achieves state-of-the-art accuracy of low-bit shift networks with a Top-1 accuracy of 69.82% on ResNet-18 and 75.75% on ResNet-50 without extra technique at initialization or during training.

heading: 5.2 Compare and analyze the dynamics of weights with different training paradigms
text: The dynamics of weights during training reveals the learning process of a neural network. Here we define two indices reflecting the weight variation behaviour during training, namely weight sign variation rate (WSVR) and weight low-value rate (WLVR). Then we compare the variation trend of them among different models during training.
Weight Sign Variation Rate (WSVR) indicates the frequency of weight sign variation during training. To measure WSVR, we take weight snapshots every 10 epochs during training and measure the percentage of weights with a different sign between two neighbouring snapshots as the WSVR.
Weight Low-Value Rate (WLVR) indicates the percentage of weight values relatively close or equal to zero. We use it as a unified index of continuous and discrete weights to reflect their generalized sparseness during training. For discrete weight networks, we consider weight sparsity as WLVR. For a model with continuous weight trained without an `1 regularizer, the low-value weights oscillate in a neighbouring region of zero. To measure WLVR, we normalize the weight tensors of each layer to the range between -1 and 1, then count the percentage of weights between -0.03 and 0.03 as WLVR. Our conclusion relies on the variation trend of the curves, which is not significantly affected by this hyper-parameter.
Experiments setup. We compare the two indicators mentioned above on three models: a fullprecision model, a ternary weight model including quantizer [15], and an S3 re-parameterized ternary weight model described in section 4.1. This analysis chooses the ResNet-20 model as the backbone and trains all three models on the CIFAR-10 dataset for 150 epochs with a cosine annealing learning rate and the initial learning rate set to 0.1. All models are converged and reach a reasonable validation accuracy on CIFAR10 (> 91%). We measure WSVRs and WLVRs for each layer in all three models during training and summarize the results in Figure 4.
Result analysis. We can observe from Figure 4a that the full-precision network has high WSVRs at the beginning of training and then slowly decreases to zero in the end, indicating that the weight signs oscillate rapidly initially and gradually stabilize in the end. On the contrary, the ternary weight model with a traditional quantizer remains low WSVRs during the whole training process, indicating that the weight sign variation is not as frequent as its full-precision counterpart. Although our proposed approach has a different trend of WSVRs with the full-precision model initially, it is in good alignment in the rest of the training stage.
Figure 4b shows that the full-precision network has low WLVRs in the early stage of training and then slowly increases, indicating that the portion of low-value weights increases during the training of the full precision model. However, the WLVRs variation trend of the ternary weight network with quantizer is toward the opposite direction—the weight sparsity of the ternary weight network trained with a quantizer decrease during training. On the trend of this indicator, our method better aligns with the full-precision model.
We argue that the design of S3 re-parameterization is the key to better alignment with the weight dynamics. By decomposing into wsign and wsparse, the discrete weight can oscillate between -1 to 1 values directly, and the dense weight regularizer keeps the wsparse stay at one as long as possible until both +1 and -1 status increasing the loss value and the gradient signal from the optimizer push the discrete weight values to zero status. This decomposition design leads to weight dynamics very close to the full-precision weight dynamics described in section 3.2, i.e. oscillation and slowly converge to a specific weight sign, otherwise push to zero.

heading: 5.3 Ablation studies
text: In this section, we verify the efficiency and robustness of our method via extensive experiments.
Dense weight regularizer. We verify a wide range of hyper-parameters of the dense weight regularizer and two decay schedulers: linear decay and cosine decay, to prove our method’s efficiency and robustness. We choose the 3-bit S3 re-parameterized shift network and ResNet-18 backbone on the ImageNet dataset as the test case. All hyper-parameters are the same as described in section 5.1. The ablation study results are summarized to Table 3.
The results show that the performance of S3 re-parameterized networks is insensitive to the choice of α value of the dense weight regularizer. The decay schedulers for α have a limited impact on the performance of the trained model as well, indicating that the main benefit of dense weight priori comes from the early stage of training. This result implies the performance gain from initialization with a pre-trained full-precision model may come from the good initial estimation of weight sign from the pre-trained weights.
Although the experiment results are consistent across a wide range of α values and two different decay schedulers, Figure 5 shows that the dense weight regularizer is an indispensable part to train an S3 re-parameterized network—otherwise, the training suffers from a convergence problem.
Training epochs. Due to their frequent sign variation instability, binary parameters’ training requires more epochs compared to their full-precision counterparts [6, 24, 2]. Since the number of training epochs is critical for binary parameter training, we verify the neural network performance affected by it. We choose the 3-bit S3 re-parameterized shift network and ResNet-18/50 backbone on ImageNet dataset as the test case. All hyper-parameters are the same as described in section 5.1, except for the number of epochs. Table 4 shows that the network performance can significantly improve with more epochs. With the training of 200 epochs, we close the accuracy gap between 3bit shift networks and full-precision CNN on ResNet18/50 ImageNet experiments.

heading: 6 Conclusion
text: Although low-bit shift networks are memory efficient and hardware friendly during inference, they are not able to achieve competing performance with their full-precision counterparts due to the gradient vanishing and weight sign freezing problems when trained by existing methods. Our proposed S3 reparametrization technique efficiently addresses these issues and bridges the accuracy gap between
low-bit shift networks and their full-precision counterparts by carefully design a decomposed space for optimization so the discrete weight dynamics can match the continuous weight dynamics. Extensive experiments and ablation studies demonstrate the superior effectiveness and robustness of our method for training low-bit shift networks. Moreover, we show that S3 reparametrization enables a better alignment between the dynamics of weights in training a low-bit shift network and its full-precision counterpart. Our future work is to further explore the theoretical ground of our reparametrization technique and weight dynamics.

heading: Acknowledgement
text: We would like to thank the area chair and the anonymous reviewers for their thoughtful discussions that led to significant improvement of the paper. We want to thank our colleagues Yunhe Wang and Chao Xing for providing us with helpful suggestions during the initial development phase of the paper. We also enjoyed our technical discussions with Mostafa Elhousie about DeepShift networks. We appreciate the initial hardware cost analysis by our colleague Seyed Alireza Ghaffari.

heading: A Appendix
text: A.1 Comparison of the power-of-two scaling factor parameterizations
This experiment compares different parameterizations of the power-of-two scaling factors on a 3-bit shift network. Our proposed method describe in Eq.8, and another is a staircase-like quantizer function. Besides different scaling factor parameterization, all other hyper-parameters and designs are the same as the experiments in Table 3 except for training epochs reduced to 120.
The design of the staircase-like quantizer is following the general practice of quantization-aware training. In 3bit shift network, the value of power-of-two scaling factors is limited to {0, 1, 2}. During the forward propagation, shift parameters rescale to the range of (-0.5, 2.5) based on their min and max, and then rounded. During the backward propagation, we use STE to estimate the gradient across the staircase-like quantizer function.
Our experiment results summarized in Table 5, it shows that our proposed parameterization of the power-of-two scaling factor improves the shift networks’ performance.
A.2 Figures of the training epochs experiments
Figure 6 and 7 shows the training loss curves and testing accuracy curves of the training epochs experiments summarized in Table 4.

Review summaries:
This paper proposes a new weight re-parametrization technique $S^3$ for training low-bit shift network. It claims that this new re-parametrization technique is weight-initialization insensitive and accuracy persistent compared with previous methods. In ImageNet, it achieves comparable top-1 accuracy with 3-bits, less than previous methods requires at 5-bit weight representation. Additionally, they also design two indices of weight dynamics to illustrate the mechanism of how $S^3$ works.

The paper suggests a new training technique for neural networks, where each parameter is broken down into multiple parameters, representing its sign, sparsity, and magnitude (or shift). They explain why this new technique is useful for overcoming vanishing gradients and sign-freezing. They show that this training can produce a network with 3 bits weights, with the same quality as the standard fp32 network.