<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Neurosci.</journal-id>
<journal-title>Frontiers in Neuroscience</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Neurosci.</abbrev-journal-title>
<issn pub-type="epub">1662-453X</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3389/fnins.2017.00538</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Neuroscience</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Training Deep Convolutional Neural Networks with Resistive Cross-Point Devices</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>Gokmen</surname> <given-names>Tayfun</given-names></name>
<xref ref-type="author-notes" rid="fn001"><sup>&#x0002A;</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/339406/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Onen</surname> <given-names>Murat</given-names></name>
<uri xlink:href="http://loop.frontiersin.org/people/452092/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Haensch</surname> <given-names>Wilfried</given-names></name>
<uri xlink:href="http://loop.frontiersin.org/people/465324/overview"/>
</contrib>
</contrib-group>
<aff><institution>IBM Thomas J. Watson Research Center</institution>, <addr-line>Yorktown Heights, NY</addr-line>, <country>United States</country></aff>
<author-notes>
<fn fn-type="edited-by"><p>Edited by: Themis Prodromakis, University of Southampton, United Kingdom</p></fn>
<fn fn-type="edited-by"><p>Reviewed by: Shimeng Yu, Arizona State University, United States; Alexantrou Serb, University of Southampton, United Kingdom</p></fn>
<fn fn-type="corresp" id="fn001"><p>&#x0002A;Correspondence: Tayfun Gokmen <email>tgokmen&#x00040;us.ibm.com</email></p></fn>
<fn fn-type="other" id="fn002"><p>This article was submitted to Neuromorphic Engineering, a section of the journal Frontiers in Neuroscience</p></fn></author-notes>
<pub-date pub-type="epub">
<day>10</day>
<month>10</month>
<year>2017</year>
</pub-date>
<pub-date pub-type="collection">
<year>2017</year>
</pub-date>
<volume>11</volume>
<elocation-id>538</elocation-id>
<history>
<date date-type="received">
<day>17</day>
<month>06</month>
<year>2017</year>
</date>
<date date-type="accepted">
<day>14</day>
<month>09</month>
<year>2017</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x000A9; 2017 Gokmen, Onen and Haensch.</copyright-statement>
<copyright-year>2017</copyright-year>
<copyright-holder>Gokmen, Onen and Haensch</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/"><p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) or licensor are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p></license>
</permissions>
<abstract>
<p>In a previous work we have detailed the requirements for obtaining maximal deep learning performance benefit by implementing fully connected deep neural networks (DNN) in the form of arrays of resistive devices. Here we extend the concept of Resistive Processing Unit (RPU) devices to convolutional neural networks (CNNs). We show how to map the convolutional layers to fully connected RPU arrays such that the parallelism of the hardware can be fully utilized in all three cycles of the backpropagation algorithm. We find that the noise and bound limitations imposed by the analog nature of the computations performed on the arrays significantly affect the training accuracy of the CNNs. Noise and bound management techniques are presented that mitigate these problems without introducing any additional complexity in the analog circuits and that can be addressed by the digital circuits. In addition, we discuss digitally programmable update management and device variability reduction techniques that can be used selectively for some of the layers in a CNN. We show that a combination of all those techniques enables a successful application of the RPU concept for training CNNs. The techniques discussed here are more general and can be applied beyond CNN architectures and therefore enables applicability of the RPU approach to a large class of neural network architectures.</p>
</abstract>
<kwd-group>
<kwd>convolutional neural networks (CNN)</kwd>
<kwd>resistive processing unit (RPU)</kwd>
<kwd>deep neural network</kwd>
<kwd>deep learning</kwd>
<kwd>resistive switching</kwd>
<kwd>resistive random access memory (RRAM)</kwd>
<kwd>resistive memories</kwd>
</kwd-group>
<counts>
<fig-count count="6"/>
<table-count count="2"/>
<equation-count count="5"/>
<ref-count count="39"/>
<page-count count="13"/>
<word-count count="10371"/>
</counts>
</article-meta>
</front>
<body>
<sec sec-type="intro" id="s1">
<title>Introduction</title>
<p>Deep neural network (DNN) (LeCun et al., <xref ref-type="bibr" rid="B25">2015</xref>) based models have demonstrated unprecedented accuracy, in cases exceeding human level performance, in cognitive tasks such as object recognition (Krizhevsky et al., <xref ref-type="bibr" rid="B22">2012</xref>; He et al., <xref ref-type="bibr" rid="B20">2015</xref>; Simonyan and Zisserman, <xref ref-type="bibr" rid="B34">2015</xref>; Szegedy et al., <xref ref-type="bibr" rid="B37">2015</xref>), speech recognition (Hinton et al., <xref ref-type="bibr" rid="B21">2012</xref>), and natural language processing (Collobert et al., <xref ref-type="bibr" rid="B11">2012</xref>). These accomplishments are made possible thanks to the advances in computing architectures and the availability of large amounts of labeled training data. Furthermore, network architectures have been adjusted to take advantage of data properties such as spatial or temporal correlation. For instance, convolutional neural networks (CNNs) provide superior results for image recognition and recurrent neural networks (RNN) in speech and natural language processing. Therefore, the application space of the traditional fully connected deep learning network is apparently diminishing. In a recent paper we have introduced the concept of a resistive processing unit (RPU) as an architecture solution for fully connected DNN. Here we show that the RPU concept is equally applicable for CNNs.</p>
<p>Training large DNNs is an extremely computationally intensive task that can take weeks even on distributed parallel computing frameworks utilizing many computing nodes (Dean et al., <xref ref-type="bibr" rid="B12">2012</xref>; Le et al., <xref ref-type="bibr" rid="B24">2012</xref>; Gupta et al., <xref ref-type="bibr" rid="B19">2016</xref>). There have been many attempts to accelerate DNN training by designing and using specialized hardware such as GPUs (Coates et al., <xref ref-type="bibr" rid="B10">2013</xref>; Wu et al., <xref ref-type="bibr" rid="B38">2015</xref>), FPGAs (Gupta et al., <xref ref-type="bibr" rid="B18">2015</xref>), or ASICs (Chen et al., <xref ref-type="bibr" rid="B8">2014</xref>) that rely on conventional CMOS-technology. All of these approaches share the common objective of packing more computing units into a fixed area and power budget by using optimized multiply and add hardware so that acceleration over a conventional CPU can be achieved. Although various microarchitectures and data formats are considered for different accelerator designs (Arima et al., <xref ref-type="bibr" rid="B3">1991</xref>; Lehmann et al., <xref ref-type="bibr" rid="B27">1993</xref>; Emer et al., <xref ref-type="bibr" rid="B13">2016</xref>), all of these digital approaches use a similar underlying transistor technology and therefore the acceleration factors will eventually be limited due to scaling limitations.</p>
<p>In order to achieve even larger acceleration factors beyond conventional CMOS, novel nano-electronic device concepts based on non-volatile memory (NVM) technologies (Burr et al., <xref ref-type="bibr" rid="B5">2017</xref>), such as phase change memory (PCM) (Kuzum et al., <xref ref-type="bibr" rid="B23">2013</xref>), resistive random access memory (RRAM) (Chi et al., <xref ref-type="bibr" rid="B9">2016</xref>), and memristors (Prezioso et al., <xref ref-type="bibr" rid="B31">2015</xref>; Soudry et al., <xref ref-type="bibr" rid="B35">2015</xref>; Merced-Grafals et al., <xref ref-type="bibr" rid="B28">2016</xref>) have been explored for implementing DNN training. Acceleration factors ranging from 25<italic>X</italic> &#x02212; 2, 000<italic>X</italic> (Xu et al., <xref ref-type="bibr" rid="B39">2014</xref>; Burr et al., <xref ref-type="bibr" rid="B4">2015</xref>; Seo et al., <xref ref-type="bibr" rid="B33">2015</xref>) compared to the conventional CPU/GPU based approaches and significant reduction in power and area have been predicted. However, for these bottom-up approaches the acceleration factors are still limited by device non-idealities that are fundamental to their application as non-volatile memory (NVM) elements. Instead, using a top-down approach it is possible to develop a new class of devices, so called Resistive Processing Unit (RPU) devices (Gokmen and Vlasov, <xref ref-type="bibr" rid="B17">2016</xref>) that are free from these limitations, and therefore can promise ultimate accelerations factors of 30, 000<italic>X</italic> while still providing a power efficiency of 84, 000 <italic>GigaOps</italic>/<italic>s</italic>/<italic>W</italic>.</p>
<p>The concept of using resistive cross-point device arrays (Chen et al., <xref ref-type="bibr" rid="B7">2015b</xref>; Agrawal et al., <xref ref-type="bibr" rid="B2">2016b</xref>; Gokmen and Vlasov, <xref ref-type="bibr" rid="B17">2016</xref>; Fuller et al., <xref ref-type="bibr" rid="B14">2017</xref>) as DNN accelerators have been tested, to some extent, by performing simulations for the specific case of fully connected neural networks. The effect of various device properties and system parameters on training performance has been evaluated to derive the required device and system level specifications for a successful implementation of an accelerator chip for DNN compute efficient training (Agrawal et al., <xref ref-type="bibr" rid="B1">2016a</xref>; Gokmen and Vlasov, <xref ref-type="bibr" rid="B17">2016</xref>). A key requirement is that these analog resistive devices must change conductance symmetrically when subjected to positive or negative pulse stimuli. Indeed, these requirements differ significantly from those needed for memory elements and therefore require a systematic search for new physical mechanisms, materials and device designs to realize an ideal resistive element for DNN training. In addition, it is important to note that these resistive cross-point arrays perform the multiply and add in the analog domain in contrast to the CMOS based digital approaches. Optimizing machine learning architectures that employ this fundamentally different approach to computation requires careful analysis and trade-offs. While this has been done for the specific case of fully connected DNNs, it is not clear whether the proposed device specifications for that case generalize to a more general set of network architectures, and hence requires further validation of their applicability to a broader range of networks.</p>
<sec>
<title>Fully connected neural networks</title>
<p>Deep fully connected neural networks are composed by stacking multiple fully connected layers such that the signal propagates from input layer to output layer by going through series of linear and non-linear transformations (LeCun et al., <xref ref-type="bibr" rid="B25">2015</xref>). The whole network expresses a single differentiable error function that maps the input data on to class scores at the output layer. In most cases the network is trained with simple stochastic gradient decent (SGD), in which the error gradient with respect to each parameter is calculated using the backpropagation algorithm (Rumelhart et al., <xref ref-type="bibr" rid="B32">1986</xref>).</p>
<p>The backpropagation algorithm is composed of three cycles&#x02014;forward, backward and weight update&#x02014;that are repeated many times until a convergence criterion is met. For a single fully connected layer where <italic>N</italic> inputs neurons are connected to <italic>M</italic> output (or hidden) neurons, the forward cycle involve computing a vector-matrix multiplication (<italic><bold>y</bold></italic> &#x0003D; <italic><bold>Wx</bold></italic>) where the vector <bold>x</bold> of length <italic>N</italic> represents the activities of the input neurons and the matrix <italic><bold>W</bold></italic> of size <italic>M</italic>&#x000D7;<italic>N</italic> stores the weight values between each pair of input and output neurons. The resulting vector <bold>y</bold> of length <italic>M</italic> is further processed by performing a non-linear activation on each of the elements and then passed to the next layer. Once the information reaches to the final output layer, the error signal is calculated and backpropagated through the network. The backward cycle on a single layer also involves a vector-matrix multiplication on the transpose of the weight matrix (<italic><bold>z</bold></italic> &#x0003D; <italic><bold>W</bold></italic><sup><italic><bold>T</bold></italic></sup><bold>&#x003B4;</bold>), where the vector <bold>&#x003B4;</bold> of length <italic>M</italic> represents the error calculated by the output neurons and the vector <italic><bold>z</bold></italic> of length <italic>N</italic> is further processed using the derivative of neuron non-linearity and then passed down to the previous layers. Finally, in the update cycle the weight matrix <italic><bold>W</bold></italic> is updated by performing an outer product of the two vectors that are used in the forward and the backward cycles and usually expressed as <italic><bold>W</bold></italic> &#x02190; <italic><bold>W</bold></italic> &#x0002B; &#x003B7; (<bold>&#x003B4;</bold><italic><bold>x</bold></italic><sup><italic><bold>T</bold></italic></sup>) where &#x003B7; is a global learning rate.</p>
</sec>
<sec>
<title>Mapping fully connected layers to resistive device arrays</title>
<p>All of the above operations performed on the weight matrix <italic><bold>W</bold></italic> can be implemented with a 2D crossbar array of two-terminal resistive devices with <italic>M</italic> rows and <italic>N</italic> columns where the stored conductance values in the crossbar array form the matrix <italic><bold>W</bold></italic>. In the forward cycle, input vector <italic><bold>x</bold></italic> is transmitted as voltage pulses through each of the columns and resulting vector <italic><bold>y</bold></italic> can be read as current signals from the rows (Steinbuch, <xref ref-type="bibr" rid="B36">1961</xref>). Similarly, when voltage pulses are supplied from the rows as an input in the backward cycle, then a vector-matrix product is computed on the transpose of the weight matrix <italic><bold>W</bold></italic><sup><italic><bold>T</bold></italic></sup>. Finally, in the update cycle voltage pulses representing vectors <italic><bold>x</bold></italic> and <bold>&#x003B4;</bold> are simultaneously supplied from the columns and the rows. In this configuration each cross-point device performs a local multiplication and summation operation by processing the voltage pulses coming from the column and the row and hence achieving an incremental weight update.</p>
<p>All three operating modes described above allow the arrays of cross-point devices that constitute the network to be active in all three cycles and hence enable a very efficient implementation of the backpropagation algorithm. Because of their local weight storage and processing capability these resistive cross-point devices are called RPU devices (Gokmen and Vlasov, <xref ref-type="bibr" rid="B17">2016</xref>). An array of RPU devices can perform the operations involving the weight matrix <italic><bold>W</bold></italic> locally and in parallel, and hence achieves <italic>O</italic>(1) time complexity in all three cycles, independent of the array size.</p>
<p>Here, we extend the RPU device concept toward CNNs. First we show how to map the convolutional layers to RPU device arrays such that the parallelism of the hardware can be fully utilized in all three cycles of the backpropagation algorithm. Next, we show that the RPU device specifications derived for a fully connected DNN hold for CNNs. Our study shows, however, that CNNs are more sensitive to noise and bounds (signal clipping) due to analog nature of the computations on RPU arrays. We discuss noise and bound management techniques that mitigate these problems without introducing any additional complexity in the analog circuits, and that can be addressed by the associated digital circuitry. In addition, we discuss digitally-programmable update management and device variability reduction techniques that can be used selectively for some of the layers in a CNN. We show that a combination of these techniques enables a successful application of the RPU concept for the training of CNNs. Furthermore, a network trained with RPU devices, including imperfections, can yield a classification error indistinguishable from a network trained using conventional high-precision floating point arithmetic.</p>
</sec>
</sec>
<sec sec-type="materials and methods" id="s2">
<title>Materials and methods</title>
<sec>
<title>Convolutional layers</title>
<p>The input to a convolutional layer can be an image or the output of the previous convolutional layer and is generally considered as a volume with dimensions of (<italic>n, n, d</italic>) with a width and height of <italic>n</italic> pixels and a depth of <italic>d</italic> channels corresponding to different input components (e.g., red, green, and blue components of an image) as illustrated in Figure <xref ref-type="fig" rid="F1">1A</xref>. The kernels of a convolutional layer are also a volume that is spatially small along the width and height, but extends through the full depth of the input volume with dimensions of (<italic>k, k, d</italic>). During the forward cycle, each kernel slides over the input volume across the width and height and a dot product is computed between the parameters of the kernels and the input pixels at any position. Assuming no zero padding and single pixel sliding (i.e., stride is equal to one), this 2D convolution operation results in a single output plane with dimensions ((<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1), (<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1), 1) per kernel. Since there exists <italic>M</italic> different kernels, output becomes a volume with dimensions ((<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1), (<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1), <italic>M</italic>) and is passed to following layers for further processing. During the backward cycle of a convolutional layer similar operations are performed but in this case the spatially flipped kernels slide over the error signals that are backpropagated from the upper layers. The error signals form a volume with the same dimensions of the output ((<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1), (<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1), <italic>M</italic>). The results of this backward convolution are organized to a volume with dimensions (<italic>n, n, d</italic>) and are further backpropagated for error calculations in the previous layers. Finally, in the update cycle, gradient with respect to each parameter is computed by convolving the input volume with the error volume used in the forward and backward cycles, respectively. This gradient information, which has the same dimensions as the kernels, is added to the kernel parameters after scaled with a learning rate.</p>
<fig id="F1" position="float">
<label>Figure 1</label>
<caption><p><bold>(A)</bold> Schematics of a convolutional layer showing the input volume, kernels, and the output volume. <bold>(B)</bold> Schematics of a mapped convolutional layer to an RPU array showing the input and output matrixes and their propagation through the kernel matrix during the forward, backward and the update cycles.</p></caption>
<graphic xlink:href="fnins-11-00538-g0001.tif"/>
</fig>
</sec>
<sec>
<title>Mapping convolutional layers to resistive device arrays</title>
<p>For an efficient implementation of a convolutional layer using an RPU array, all the input/output volumes as well as the kernel parameters need to be rearranged in a specific way. The convolution operation essentially performs a dot product between the kernel parameters and a local region of the input volume and hence can be formulated as a matrix-matrix multiply (Gao et al., <xref ref-type="bibr" rid="B16">2016</xref>). By collapsing the parameters of a single kernel to a column vector of length <italic>k</italic><sup>2</sup><italic>d</italic> and stacking all <italic>M</italic> different kernels as separate rows, a parameter matrix <italic><bold>K</bold></italic> of size <italic>M</italic>&#x000D7;<italic>k</italic><sup>2</sup><italic>d</italic> is formed that stores all of the trainable parameters associated a single convolutional layer as shown in Figure <xref ref-type="fig" rid="F1">1B</xref>. After this rearrangement, in the forward cycle the outputs corresponding to a specific location along the width and height can be calculated by performing a vector-matrix multiplication <italic><bold>y</bold></italic> &#x0003D; <italic><bold>Kx</bold></italic>, where the vector <italic><bold>x</bold></italic> of length <italic>k</italic><sup>2</sup><italic>d</italic> is a local region in the input volume and vector <italic><bold>y</bold></italic> of length <italic>M</italic> contains all of the results along the depth of the output volume. By repeating this vector-matrix multiplication for different local regions, the full volume of the output map can be computed. Indeed, this repeated vector-matrix multiplication is equivalent to a matrix-matrix multiplication <italic><bold>Y</bold></italic> &#x0003D; <italic><bold>KX</bold></italic>, where the matrix <italic><bold>X</bold></italic> with dimensions <italic>k</italic><sup>2</sup><italic>d</italic> &#x000D7; (<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1)<sup>2</sup> has the input neuron activities with some repetition and resulting matrix <italic><bold>Y</bold></italic> with dimensions <italic>M</italic> &#x000D7; (<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1)<sup>2</sup> has all the results corresponding to the output volume. Similarly, using the transpose of the parameter matrix, the backward cycle of a convolutional layer can also be expresses as a matrix-matrix multiplication <italic><bold>Z</bold></italic> &#x0003D; <italic><bold>K</bold></italic><sup><italic><bold>T</bold></italic></sup><italic><bold>D</bold></italic>, where the matrix <italic><bold>D</bold></italic> with dimensions <italic>M</italic> &#x000D7; (<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1)<sup>2</sup> has the error signals corresponding to an error volume. Furthermore, in this configuration the update cycle also simplifies to a matrix multiplication where the gradient information for the whole parameter matrix <italic><bold>K</bold></italic> can be computed using matrices <italic><bold>X</bold></italic> and <italic><bold>D</bold></italic>, and the update rule can be written as <italic><bold>K</bold></italic> &#x02190; <italic><bold>K</bold></italic> &#x0002B; &#x003B7;(<italic><bold>DX</bold></italic><sup><italic><bold>T</bold></italic></sup>).</p>
<p>The rearrangement of the trainable parameters to a single matrix <italic><bold>K</bold></italic> by flattening of the kernels enables an efficient implementation of a convolutional layer using an RPU array. After this rearrangement, all the matrix operations performed on <italic><bold>K</bold></italic> can be computed as a series of vector operations on an RPU array. Analogous to the fully connected layers, matrix <italic><bold>K</bold></italic> is mapped to an RPU array with <italic>M</italic> rows and <italic>k</italic><sup>2</sup><italic>d</italic> columns as shown in Figure <xref ref-type="fig" rid="F1">1B</xref>. In the forward cycle, the input vector corresponding to a single column in <italic><bold>X</bold></italic> is transmitted as voltage pulses from the columns and the results are read from the rows. Repetition of this operation for all (<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1)<sup>2</sup> columns in <italic><bold>X</bold></italic> completes all the computations required for the forward cycle. Similarly, in the backward cycle the input vector corresponding to a single column in <italic><bold>D</bold></italic> is serially fed to the rows of the array. The update rule shown above can be viewed as a series of updates that involves computing an outer product between two columns from <italic><bold>X</bold></italic> and <italic><bold>D</bold></italic>. This can be achieved by serially feeding the columns of <italic><bold>X</bold></italic> and <italic><bold>D</bold></italic> simultaneously to the RPU array. During the update cycle each RPU device performs a series of local multiplication and summation operations and hence calculates the product of the two matrixes.</p>
<p>We note that for a single input the total number of multiplication and summation operations that need to be computed in all three cycles for a convolutional layer is <italic>Mk</italic><sup>2</sup><italic>d</italic>(<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1)<sup>2</sup> and this number is independent of the method of computation. The proposed RPU mapping described above achieves this number as follows: Due to the inherent parallelism in the RPU array <italic>Mk</italic><sup>2</sup><italic>d</italic> operations are performed simultaneously for each vector operation performed on the array. Since there are (<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1)<sup>2</sup> vector operations performed serially on the array, the total number of computations matches the expectation. Alternatively, one can consider that there are <italic>Mk</italic><sup>2</sup><italic>d</italic> trainable parameters and that each parameter is used (<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1)<sup>2</sup> times due to the parameter sharing in a convolution layer. Since each RPU device in an array can perform a single computation at any given time, parameter sharing is achieved by accessing the array (<italic>n</italic> &#x02212; <italic>k</italic> &#x0002B; 1)<sup>2</sup> times. For fully connected layers each weight is used only once and therefore all the computations can be carried out using single vector operations on the array.</p>
<p>The end result of mapping a convolutional layer onto the RPU array is very similar to the mapping of a fully connected layer and therefore does not change the fundamental operations performed on the array. We also emphasize that the convolutional layer described above, with no zero padding and single pixel sliding, is only used for illustration purposes. The proposed mapping is more general and can be applied to convolutional layers with zero padding, strides larger than a single pixel, dilated convolutions or convolutions with non-square inputs or kernels. This enables the mapping of all of the trainable parameters of a conventional CNN within convolutional and fully connected layers to RPU arrays.</p>
</sec>
</sec>
<sec sec-type="results" id="s3">
<title>Results</title>
<p>In order to test the validity of this method we performed DNN training simulations for the MNIST dataset using a CNN architecture similar to LeNet-5 (LeCun et al., <xref ref-type="bibr" rid="B26">1988</xref>). It comprises of two convolutional layers with 5 &#x000D7; 5 kernels and hyperbolic tangent (<italic>tanh</italic>) activation functions. The first layer has 16 kernels while the second layer has 32 kernels. Each convolutional layer is followed by a subsampling layer that implements the max pooling function over non-overlapping pooling windows of size 2 &#x000D7; 2. The output of the second pooling layer, consisting of 512 neuron activations, feeds into a fully connected layer consisting of 128 <italic>tanh</italic> neurons, which is then connected into a 10-way <italic>softmax</italic> output layer. Training is performed repeatedly using a mini-batch size of unity for all 60,000 images in the training dataset which constitutes a single training epoch. Learning rate of &#x003B7; &#x0003D; 0.01 is used throughout the training for all 30 epochs.</p>
<p>Following the proposed mapping above, the trainable parameters (including the biases) of this architecture are stored in 4 separate arrays with dimensions of 16 &#x000D7; 26 and 32 &#x000D7; 401 for the first two convolutional layers, and, 128 &#x000D7; 513 and 10 &#x000D7; 129 for the following two fully connected layers. We name these arrays as <italic>K</italic><sub>1</sub>, <italic>K</italic><sub>2</sub>, <italic>W</italic><sub>3</sub>, and <italic>W</italic><sub>4</sub>, where the subscript denotes the layer&#x00027;s location and <italic>K</italic> and <italic>W</italic> is used for convolutional and fully connected layers, respectively. When all four arrays are implemented as simple matrices and the operations are performed with floating point (FP) numbers, the network achieves a classification error of 0.8% on the test data. This is the FP-baseline model that we compare against the RPU based simulations for the rest of the paper. We assume all activations and pooling layers are implemented in the digital circuits for the RPU based simulations.</p>
<sec>
<title>RPU baseline model</title>
<p>The influence of various RPU device properties, variations, and non-idealities on the training accuracy of a deep fully connected network are discussed in Gokmen and Vlasov (<xref ref-type="bibr" rid="B17">2016</xref>). We follow the same methodology here and as a baseline for of the RPU models discussed below, we use the device specifications that resulted in an acceptable test error on the fully connected network.</p>
<p>The RPU-baseline model uses the stochastic update scheme in which the numbers that are encoded from neurons (<italic>x</italic><sub><italic>i</italic></sub> and &#x003B4;<sub><italic>j</italic></sub>) are implemented as stochastic bit streams. Each RPU device performs a stochastic multiplication (Gaines, <xref ref-type="bibr" rid="B15">1967</xref>; Poppelbaum et al., <xref ref-type="bibr" rid="B30">1967</xref>; Merkel and Kudithipudi, <xref ref-type="bibr" rid="B29">2014</xref>) via simple coincidence detection as illustrated in Figure <xref ref-type="fig" rid="F2">2</xref>. In this update scheme the expected weight change can be written as:</p>
<disp-formula id="E1"><label>(1)</label><mml:math id="M1"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mo>&#x1D53C;</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mo>&#x00394;</mml:mo><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>B</mml:mi><mml:mi>L</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x003B4;</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>&#x003B4;</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <italic>BL</italic> is the length of the stochastic bit stream, &#x00394;<italic>w</italic><sub><italic>min</italic></sub> is the change in the weight value due to a single coincidence event, <italic>C</italic><sub><italic>x</italic></sub> and <italic>C</italic><sub>&#x003B4;</sub> are the gain factors used during the stochastic translation for the columns and the rows, respectively. The RPU-baseline has <italic>BL</italic> &#x0003D; 10, <inline-formula><mml:math id="M2"><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x003B4;</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msqrt><mml:mrow><mml:mo>&#x003B7;</mml:mo><mml:mo>/</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>B</mml:mi><mml:mi>L</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msqrt><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula> and &#x00394;<italic>w</italic><sub><italic>min</italic></sub> &#x0003D; 0.001. The change in weight values is associated with a conductance change in the RPU devices; therefore, in order to capture device imperfections, &#x00394;<italic>w</italic><sub><italic>min</italic></sub> is assumed to have cycle-to-cycle and device-to-device variations of 30%. Actual RPU devices may also show different amounts of change to positive and negative weight updates (i.e., inherent asymmetry). This is taken into account by using separate <inline-formula><mml:math id="M3"><mml:mo>&#x00394;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>&#x0002B;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> for the positive updates and <inline-formula><mml:math id="M4"><mml:mo>&#x00394;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mo class="qopname">min</mml:mo></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> for the negative updates for each RPU device. The ratio <inline-formula><mml:math id="M5"><mml:mo>&#x00394;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mo class="qopname">min</mml:mo></mml:mrow><mml:mrow><mml:mo>&#x0002B;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula>/<inline-formula><mml:math id="M6"><mml:mo>&#x00394;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mo class="qopname">min</mml:mo></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> among all devices is assumed to be unity as this can be achieved by a global adjustment of the voltage pulse durations/heights. However, device-to-device mismatch is unavoidable and therefore 2% variation is assumed for this parameter. To take conductance saturation into account, which is expected to be present in actual RPU devices, the bounds on the weights values, |<italic>w</italic><sub><italic>ij</italic></sub>|, is assumed be 0.6 on average with a 30% device-to-device variation. We did not introduce any non-linearity in the weight update as this effect has been shown to be insignificant as long as the updates are reasonably balanced (symmetric) between up and down changes (Agrawal et al., <xref ref-type="bibr" rid="B1">2016a</xref>; Gokmen and Vlasov, <xref ref-type="bibr" rid="B17">2016</xref>). During the forward and backward cycles the vector-matrix multiplications performed on an RPU array are prone to analog noise and signal saturation due to the peripheral circuitry. The array operations, including the input and output signals, are illustrated in Figure <xref ref-type="fig" rid="F2">2</xref>. The output voltage (<italic>V</italic><sub><italic>out</italic></sub>) is determined by integrating the analog current coming from the column (or row) during a measurement time (<italic>t</italic><sub><italic>meas</italic></sub>) using a capacitor (<italic>C</italic><sub><italic>int</italic></sub>) and an op-amp. This approach will have noise contributions from various sources. These noise sources are taken into account by introducing an additional Gaussian noise, with zero mean and standard deviation of &#x003C3; &#x0003D; 0.06, to the results of vector-matrix multiplications computed on an RPU array. This noise value can be translated to an acceptable input referred voltage noise following the approach described in Gokmen and Vlasov (<xref ref-type="bibr" rid="B17">2016</xref>). In addition the results of the vector-matrix multiplications stored at <italic>V</italic><sub><italic>out</italic></sub> are bounded to a value of |&#x003B1;| &#x0003D; 12 to account for a signal saturation on the output voltage corresponding to a supply voltage on the op-amp. Table <xref ref-type="table" rid="T1">1</xref> summarizes all of the RPU-baseline model parameters used in our simulations that are also consistent with the specifications discussed in Gokmen and Vlasov (<xref ref-type="bibr" rid="B17">2016</xref>).</p>
<fig id="F2" position="float">
<label>Figure 2</label>
<caption><p>Schematics of an RPU array operation during the backward and update cycles. The forward cycle operations are identical to the backward cycle operations except the inputs are supplied from the columns and the outputs are read from the rows.</p></caption>
<graphic xlink:href="fnins-11-00538-g0002.tif"/>
</fig>
<table-wrap position="float" id="T1">
<label>Table 1</label>
<caption><p>Summary of the RPU-baseline model parameters.</p></caption>
<table frame="hsides" rules="groups">
<thead><tr>
<th valign="top" align="left"><bold><italic>BL</italic></bold></th>
<th valign="top" align="left"><bold><italic>C</italic><sub><italic>x</italic></sub>,<italic>C</italic><sub>&#x003B4;</sub></bold></th>
<th valign="top" align="center" colspan="3" style="border-bottom: thin solid #000000;"><bold>&#x00394;<italic>w</italic><sub><italic>min</italic></sub></bold></th>
<th valign="top" align="center" colspan="2" style="border-bottom: thin solid #000000;"><inline-formula><mml:math id="M7"><mml:mstyle mathvariant="bold"><mml:mi>&#x00394;</mml:mi></mml:mstyle><mml:msubsup><mml:mrow><mml:mstyle mathvariant="bold"><mml:mi>w</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mstyle mathvariant="bold"><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mstyle mathvariant="bold"><mml:mo>&#x0002B;</mml:mo></mml:mstyle></mml:mrow></mml:msubsup><mml:mstyle mathvariant="bold"><mml:mo>/</mml:mo></mml:mstyle><mml:mstyle mathvariant="bold"><mml:mi>&#x00394;</mml:mi></mml:mstyle><mml:msubsup><mml:mrow><mml:mstyle mathvariant="bold"><mml:mi>w</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mstyle mathvariant="bold"><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mstyle mathvariant="bold"><mml:mo>-</mml:mo></mml:mstyle></mml:mrow></mml:msubsup></mml:math></inline-formula></th>
<th valign="top" align="center" colspan="2" style="border-bottom: thin solid #000000;"><bold>|<italic>w</italic><sub><italic>ij</italic></sub>|</bold></th>
<th valign="top" align="center"><bold>&#x003C3; Analog noise</bold></th>
<th valign="top" align="center"><bold>|&#x003B1;| Signal bound</bold></th>
</tr>
<tr>
<th/>
<th/>
<th valign="top" align="left"><bold>Average</bold></th>
<th valign="top" align="center"><bold>Device to device variation<xref ref-type="table-fn" rid="TN1"><sup>&#x0002A;</sup></xref></bold></th>
<th valign="top" align="center"><bold>Cycle-to-cycle variation<xref ref-type="table-fn" rid="TN1"><sup>&#x0002A;</sup></xref></bold></th>
<th valign="top" align="center"><bold>Average</bold></th>
<th valign="top" align="center"><bold>Device-to-device variation<xref ref-type="table-fn" rid="TN1"><sup>&#x0002A;</sup></xref></bold></th>
<th valign="top" align="center"><bold>Average</bold></th>
<th valign="top" align="center"><bold>Device-to-device variation<xref ref-type="table-fn" rid="TN1"><sup>&#x0002A;</sup></xref></bold></th>
<th/>
<th/>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">10</td>
<td valign="top" align="left">1.0</td>
<td valign="top" align="left">0.001</td>
<td valign="top" align="center">30%</td>
<td valign="top" align="center">30%</td>
<td valign="top" align="center">1.0</td>
<td valign="top" align="center">2%</td>
<td valign="top" align="center">0.6</td>
<td valign="top" align="center">30%</td>
<td valign="top" align="center">0.06</td>
<td valign="top" align="center">12</td>
</tr>
</tbody>
</table>
<table-wrap-foot>
<fn id="TN1">
<label>&#x0002A;</label>
<p><italic>All variations are 1-sigma values reported as percentages normalized to the average values</italic>.</p></fn>
</table-wrap-foot>
</table-wrap>
<p>The CNN training results for various RPU variations are shown in Figure <xref ref-type="fig" rid="F3">3A</xref>. Interestingly, the RPU-baseline model shown in Table <xref ref-type="table" rid="T1">1</xref> performs poorly and only achieves a test error between 10 and 20% (black curve). Not only is this value significantly higher than the FP-baseline value of 0.8% but is also higher than the 2.3% error rate achieved with the same RPU model for a fully connected network on the same dataset. Our analysis shows that the larger test error is mainly due to contributions of analog noise introduced during the backward cycle, and signal bounds introduced in the forward cycle on the final RPU array, <italic>W</italic><sub>4</sub>. As shown by the green curve, the model without analog noise in the backward cycle and infinite bounds on <italic>W</italic><sub>4</sub> reaches a respectable test error of about 1.5%. When we eliminate only the noise while keeping the bounds, the model exhibits reasonable training up to about the 8th epoch but then the error rate suddenly increases and reaches a value about 10%. Similarly, if we only eliminate the bounds while keeping the noise, the model, shown by the red curve, performs poorly and the error rate stays around 10% level. In the following, we discuss the origins of these errors and methods to mitigate them.</p>
<fig id="F3" position="float">
<label>Figure 3</label>
<caption><p>Test error of CNN with the MNIST dataset. Open white circles correspond to the model with the training performed using the floating point (FP) numbers. <bold>(A)</bold> Lines with different colors correspond to RPU-baseline models with different noise terms in the backward cycle and signals bounds on the last classification layer as given by the legend. <bold>(B)</bold> All lines marked with different colors correspond to RPU-baseline models including the noise and the bound terms; however, the noise management and the bound management techniques are applied selectively as given by the legend.</p></caption>
<graphic xlink:href="fnins-11-00538-g0003.tif"/>
</fig>
</sec>
<sec>
<title>Noise and bound management techniques</title>
<p>It is clear that the noise in the backward cycle and the signal bounds on the output layer need to be addressed for the successful application of the RPU approach to CNN training. The complete elimination of analog noise and signal bounds is not realistic for real hardware implementation of RPU arrays. Designing very low noise read circuity with very large signal bounds is not an option because it will introduce unrealistic area and power constraints on the analog circuits. Below we describe noise and bound management techniques that can be easily implemented in the digital domain without changing the design considerations of RPU arrays and the supporting analog peripheral circuits.</p>
<p>During a vector-matrix multiplication on an RPU array, the input vector (<bold>x</bold> or <bold>&#x003B4;</bold>) is transmitted as voltage pulses with a fixed amplitude and tunable durations as illustrated by Figure <xref ref-type="fig" rid="F2">2</xref>. In a naive implementation, the maximal pulse duration represents unity (<italic>t</italic><sub><italic>meas</italic></sub> &#x02192; 1), and all pulse durations are scaled accordingly depending on the values of <italic>x</italic><sub><italic>i</italic></sub> or &#x003B4;<sub><italic>j</italic></sub>. This scheme works optimally for the forward cycle with <italic>tanh</italic> (or <italic>sigmoid</italic>) activations, as all <italic>x</italic><sub><italic>i</italic></sub> in <italic><bold>x</bold></italic> including a bias term are between [&#x02212;1, 1]. However, this assumption becomes problematic for the backward cycle, as there are not any guarantees for the range of the error signals in <bold>&#x003B4;</bold>. For instance, all &#x003B4;<sub><italic>j</italic></sub> in <bold>&#x003B4;</bold> may become significantly smaller than unity (<bold>&#x003B4;</bold> &#x0226A; <bold>1</bold>) as the training progresses and the classification error gets smaller. In this scenario the results of a vector-matrix multiplication in the backward cycle, as shown by Equation (2) below:</p>
<disp-formula id="E2"><label>(2)</label><mml:math id="M8"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mstyle mathvariant='bold-italic'><mml:mtext>z</mml:mtext></mml:mstyle><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mstyle mathvariant='bold-italic'><mml:mtext>W</mml:mtext></mml:mstyle></mml:mrow><mml:mrow><mml:mstyle mathvariant='bold-italic'><mml:mtext>T</mml:mtext></mml:mstyle></mml:mrow></mml:msup><mml:mstyle mathvariant="bold"><mml:mi>&#x003B4;</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant="bold"><mml:mi>&#x003C3;</mml:mi></mml:mstyle></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>are dominated by the noise term <bold>&#x003C3;</bold>, as the signal term <italic><bold>W</bold></italic><sup><italic><bold>T</bold></italic></sup><bold>&#x003B4;</bold> does not generate enough voltage at the output. This is indeed why the noise introduced in the backward cycle brings the learning to a halt at around 10% error rate as shown by models in Figure <xref ref-type="fig" rid="F3">3A</xref>.</p>
<p>In order to get better signal at the output when <bold>&#x003B4;</bold> &#x0226A; <bold>1</bold>, we divide all &#x003B4;<sub><italic>j</italic></sub> in <bold>&#x003B4;</bold> to the maximum value &#x003B4;<sub><italic>max</italic></sub> before the vector-matrix multiplication is performed on an RPU array. We note that this division operation is performed in digital circuits and ensures that at least one signal of unit amplitude exists at the input of an RPU array. After the results of the vector-matrix multiplication are read from an RPU array and converted back to digital signals, we rescale the results by the same amount &#x003B4;<sub><italic>max</italic></sub>. In this noise management scheme, the results of a vector-matrix multiplication can be written as:</p>
<disp-formula id="E3"><label>(3)</label><mml:math id="M9"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mrow><mml:mstyle mathvariant='bold-italic' mathsize='normal'><mml:mtext>z</mml:mtext></mml:mstyle><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:msup><mml:mstyle mathvariant='bold-italic' mathsize='normal'><mml:mtext>W</mml:mtext></mml:mstyle><mml:mstyle mathvariant='bold-italic' mathsize='normal'><mml:mtext>T</mml:mtext></mml:mstyle></mml:msup><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mfrac><mml:mstyle mathvariant='bold' mathsize='normal'><mml:mi>&#x003B4;</mml:mi></mml:mstyle><mml:mrow><mml:msub><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant='bold' mathsize='normal'><mml:mi>&#x003C3;</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:msub><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>The result, <inline-formula><mml:math id="M10"><mml:mrow><mml:mstyle mathvariant='bold' mathsize='normal'><mml:mtext>z</mml:mtext></mml:mstyle><mml:mo>=</mml:mo><mml:msup><mml:mstyle mathvariant='bold-italic' mathsize='normal'><mml:mtext>W</mml:mtext></mml:mstyle><mml:mstyle mathvariant='bold-italic' mathsize='normal'><mml:mtext>T</mml:mtext></mml:mstyle></mml:msup><mml:mstyle mathvariant='bold' mathsize='normal'><mml:mi>&#x003B4;</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant='bold' mathsize='normal'><mml:mi>&#x003C3;</mml:mi></mml:mstyle><mml:msub><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, effectively reduces the impact of noise significantly for small error rates &#x003B4;<sub><italic>max</italic></sub> &#x0226A; 1. This noise management scheme enables the propagation of error signals that are arbitrarily small and maintains a fixed signal to noise ratio independent of the range of values in <bold>&#x003B4;</bold>.</p>
<p>In addition to the noise, the results of a vector-matrix multiplication will be strongly influenced by the |&#x003B1;| term that corresponds to a maximum allowed voltage during the integration time. The value |&#x003B1;| &#x0003D; 12 does not strongly influence the activations for hidden layers with <italic>tanh</italic> (or <italic>sigmoid</italic>) non-linearity because the error introduced during the calculation of <italic>tanh</italic>(<italic>z</italic>) (or <italic>sigmoid</italic>(<italic>z</italic>)) due to the bound is negligible for an input value <italic>z</italic> that is otherwise much larger. However, for the output layer with <italic>softmax</italic> (or <italic>ReLU</italic>) activations the error introduced due to the bound may become significant. For instance, if there are two outputs that are above the bounded value, they would be treated equally and the classification task would choose between the two classes with equal probability, even if one of the outputs is significantly larger than the other. This results in a significant error (major information loss) in estimating the class label and hence limits the performance of the network. As with the noise, the bounded signals start to become an issue for later stages of the training as the network &#x0201C;starts to perform good test results&#x0201D; (approaches an optimum configuration) and the decision boundary between classes become more distinct. As shown by the blue curve in Figure <xref ref-type="fig" rid="F3">3A</xref>, at the beginning of the training the network successfully learns, and test errors as low as 2% can be achieved; however, around the 8th epoch signal bounding forces the network to learn unwanted features and hence the error rate suddenly increases.</p>
<p>In order to eliminate the error introduced due to bounded signals, we propose repeating the vector-matrix multiplication after reducing the input strength by a half when a signal saturation is detected. This would guarantee that after a few iterations (<italic>n</italic>) the unbounded signals can be read reliably and properly rescaled in the digital domain. In this bound management scheme, the effective vector-matrix multiplication on an RPU array can be written as:</p>
<disp-formula id="E4"><label>(4)</label><mml:math id="M11"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mstyle mathvariant='bold-italic'><mml:mtext>y</mml:mtext></mml:mstyle><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mstyle mathvariant='bold-italic'><mml:mtext>W</mml:mtext></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mfrac><mml:mrow><mml:mstyle mathvariant='bold-italic'><mml:mtext>x</mml:mtext></mml:mstyle></mml:mrow><mml:mrow><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:mfrac></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant="bold"><mml:mi>&#x003C3;</mml:mi></mml:mstyle></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:msup><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msup></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>with a new effective bound of 2<sup><italic>n</italic></sup>|&#x003B1;|. Note the noise term is also amplified by the same factor; however, the signal to noise ratio remains fixed (only a few percent) for the largest numbers that contribute most in calculation of <italic>softmax</italic> activations.</p>
<p>In order to test the validity of the proposed noise management (NM) and bound management (BM) techniques, we performed simulations using the RPU-baseline model of Table <xref ref-type="table" rid="T1">1</xref> with and without enabling NM and BM. The summary of these simulations is presented in Figure <xref ref-type="fig" rid="F3">3B</xref>. When both NM and BM are off, the model using the RPU baseline of Table <xref ref-type="table" rid="T1">1</xref>, shown as black curve, performs poorly similar to the black curve in Figure <xref ref-type="fig" rid="F3">3A</xref>. Similarly, turning on either NM or BM alone (as shown by red and blue curves) is not sufficient and the models achieve test errors of about 10%. However, when both NM and BM are enabled the model achieves a test error of about 1.7% as shown by the green curve. This is very similar to the model with no analog noise and infinite bounds presented in Figure <xref ref-type="fig" rid="F3">3A</xref> and shows the success of the noise and bound management techniques. By simply rescaling the signal values in the digital domain, these techniques mitigate both the noise and the bound problems inherent to analog computations performed using RPU arrays.</p>
<p>The additional computations introduced in the digital domain due to NM and BM are not significant and can be addressed with a proper digital design. For the NM technique, &#x003B4;<sub><italic>max</italic></sub> needs to be determined from <bold>&#x003B4;</bold> and each element in <bold>&#x003B4;</bold> (and <bold>z</bold>) value needs to be divided (and multiplied) by &#x003B4;<sub><italic>max</italic></sub>. All of these computations require additional <italic>O</italic>(<italic>M</italic>) comparison, division and multiplication operations that are performed in the digital domain. However, given that the very same circuits need to compute <italic>O</italic>(<italic>M</italic>) error signals using the derivative of the activation functions, performing these additional operations do not change the complexity of the operations that needs to be performed by the digital circuits. Basically, the combination of all of these operations can be viewed as computing a slightly more complicated activation function. Therefore, with proper design these additional operations can be performed with only a slight overhead without causing significant slowdown on the digital circuits. Similarly, BM can be handled in the digital domain by performing <italic>O</italic>(<italic>N</italic>) computations only when a signal saturation is detected. However, BM may require an additional circuitry that detects a signal saturation that can be fed as a control signal to the digital circuits for the repeated vector-matrix multiplication.</p>
</sec>
<sec>
<title>Sensitivity to device variations</title>
<p>The RPU-baseline model with NM and BM performs reasonable well and achieves a test error of 1.7%, however, this is still above the 0.8% value achieved with a FP-baseline model. In order to identify the remaining factors contributing to this additional classification error, we performed simulations while selectively eliminating various device imperfections from different layers. The summary of these results is shown in Figure <xref ref-type="fig" rid="F4">4</xref>, where the average test error achieved between 25th and 30th epochs is reported on the y-axis along with an error bar that represents the standard deviation for the same interval. The black data points in Figure <xref ref-type="fig" rid="F4">4</xref> corresponds to experiments where device-to-device and cycle-to-cycle variations corresponding to parameters &#x00394;<italic>w</italic><sub><italic>min</italic></sub>, <inline-formula><mml:math id="M12"><mml:mo>&#x00394;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>&#x0002B;</mml:mo></mml:mrow></mml:msubsup><mml:mo>/</mml:mo><mml:mo>&#x00394;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> and |<italic>w</italic><sub><italic>ij</italic></sub>| are completely eliminated for different layers while the average values are kept unaltered. The model that is free from device variations for all four layers achieves a test error of 1.05%. We note that most of this improvement comes from the convolutional layers as a very similar test error of 1.15% is achieved for the model that does not have device variations for <italic>K</italic><sub>1</sub>&#x00026;<italic>K</italic><sub>2</sub>, whereas the model without any device variations for fully connected layers <italic>W</italic><sub>3</sub>&#x00026;<italic>W</italic><sub>4</sub> remains at 1.3% level. Among the convolutional layers, it is clear that <italic>K</italic><sub>2</sub> has a stronger influence than <italic>K</italic><sub>1</sub> as test errors of 1.2 or 1.4% are achieved respectively for models with device variations eliminated for <italic>K</italic><sub>2</sub> or <italic>K</italic><sub>1</sub>. Interestingly, when we repeated similar analysis by eliminating only the device-to-device variation for the imbalance parameter <inline-formula><mml:math id="M13"><mml:mo>&#x00394;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>&#x0002B;</mml:mo></mml:mrow></mml:msubsup><mml:mo>/</mml:mo><mml:mo>&#x00394;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> from different layers, the same trend is observed as shown by the red data points. These results highlight the importance of device asymmetry and shows that even a few percent device imbalance can significantly increase test error rates.</p>
<fig id="F4" position="float">
<label>Figure 4</label>
<caption><p>Average test error achieved between 25th and 30th epochs for a various RPU models with varying device variations. Black data points correspond to simulations in which device-to-device and cycle-to-cycle variations corresponding to parameters&#x00394;<italic>w</italic><sub><italic>min</italic></sub>, <inline-formula><mml:math id="M14"><mml:mo>&#x00394;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>&#x0002B;</mml:mo></mml:mrow></mml:msubsup><mml:mo>/</mml:mo><mml:mo>&#x00394;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> and |<italic>w</italic><sub><italic>ij</italic></sub>| are all completely eliminated from different layers. Red data points correspond to simulations in which only the device-to-device variation for the imbalance parameter <inline-formula><mml:math id="M15"><mml:mo>&#x00394;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>&#x0002B;</mml:mo></mml:mrow></mml:msubsup><mml:mo>/</mml:mo><mml:mo>&#x00394;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> is eliminated from different layers. Green points correspond to simulations in which multiple RPU devices are mapped for the second convolutional layer <italic>K</italic><sub>2</sub>. RPU-baseline with noise and bound management as well as the FP-baseline models are also included for comparison.</p></caption>
<graphic xlink:href="fnins-11-00538-g0004.tif"/>
</fig>
<p>It is clear that the reduction in device variations in some layers can further boost the network performance; however, for realistic technological implementations of the crossbar arrays variations are controlled by fabrication tolerances in a given technology. Therefore, complete or even partial elimination of any device variation is not a realistic option. Instead, in order to get better performance, the effects of the device variations can be mitigated by mapping more than one RPU device per weight, which averages out the device variations and reduces the variability (Chen et al., <xref ref-type="bibr" rid="B6">2015a</xref>). Here, we propose a flexible multi-device mapping that can be realized in the digital domain by repeating the input signals going to the columns (or rows) of an RPU array, and/or summing (averaging) the results of the output signals generated from the rows (or columns). Since the same signal propagates through many different devices and the results are summed on the digital domain, this technique averages device variations in the array without physically hardwiring the lines corresponding to different columns or rows.</p>
<p>To test the validity of this digitally controlled multi-device mapping approach, we performed simulations using models where the mapping of the most influential layer <italic>K</italic><sub>2</sub> is repeated on 4 or 13 devices. We find that the multi-device mapping approach reduces the test error to 1.45 and 1.35% for 4 and 13 device mapping cases, respectively, as shown by the green data points in Figure <xref ref-type="fig" rid="F4">4</xref>. The number of devices (&#x00023;<sub><italic>d</italic></sub>) used per weight effectively reduces the device variations by a factor proportional to <inline-formula><mml:math id="M16"><mml:msqrt><mml:mrow><mml:msub><mml:mrow><mml:mo>&#x00023;</mml:mo></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msqrt></mml:math></inline-formula>. Note that 13-device mapping of <italic>K</italic><sub>2</sub> effectively reduces the device variations by a factor of 3.6 at a cost of increase in the array dimensions to 416 &#x000D7; 401 (from 32 &#x000D7; 401) Assuming RPU arrays are fabricated with equal number of columns and rows, multi-device mapping of rectangular matrixes such as <italic>K</italic><sub>2</sub> does not introduce any operational (or circuit) overhead as long as the mapping fits in the physical dimensions of the array. However, if the functional array dimensions becomes larger than the physical dimensions of a single RPU array then more than one array can used to perform the same mapping. Independent of its physical implementation this method enables flexible control of the number of devices used while mapping different layers and is therefore a viable approach for mitigating the effects of device variability.</p>
</sec>
<sec>
<title>Update management</title>
<p>All RPU models presented so far use the stochastic update scheme with a bit length of <italic>BL</italic> &#x0003D; 10 and amplification factors that are equally distributed to the columns and the rows with values <inline-formula><mml:math id="M17"><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x003B4;</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msqrt><mml:mrow><mml:mo>&#x003B7;</mml:mo><mml:mo>/</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>B</mml:mi><mml:mi>L</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msqrt><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>. The choice of these values is dictated by the learning rate, which is a hyper-parameter of the training algorithm; therefore the hardware should be able to handle any value without imposing any restrictions on it. The learning rate for the stochastic model is the product of four terms; &#x00394;<italic>w</italic><sub><italic>min</italic></sub>, <italic>BL</italic>, <italic>C</italic><sub><italic>x</italic></sub> and <italic>C</italic><sub>&#x003B4;</sub>. &#x00394;<italic>w</italic><sub><italic>min</italic></sub> corresponds to the incremental conductance change on an RPU device due a single coincidence event; therefore the value of this parameter may be strongly restricted by the underlying RPU hardware. For instance, &#x00394;<italic>w</italic><sub><italic>min</italic></sub> may be tuned only by shaping the voltage pulses used during the update cycle and hence requires programmable analog circuits. In contrast, the control of <italic>C</italic><sub><italic>x</italic></sub>, <italic>C</italic><sub>&#x003B4;</sub>, and <italic>BL</italic> is much easier and can be implemented in the digital domain.</p>
<p>To test the effect of <italic>C</italic><sub><italic>x</italic></sub>, <italic>C</italic><sub>&#x003B4;</sub>, and <italic>BL</italic> on the training accuracy we performed simulations using the RPU-baseline model with the noise and bound management techniques described above. For all models, we used the same fixed learning rate &#x003B7; &#x0003D; 0.01 and &#x00394;<italic>w</italic><sub><italic>min</italic></sub> &#x0003D; 0.001. The summary of these results is shown in Figure <xref ref-type="fig" rid="F5">5</xref>. For the first set of models we varied <italic>BL</italic>, and both <italic>C</italic><sub><italic>x</italic></sub> and <italic>C</italic><sub>&#x003B4;</sub> are fixed at <inline-formula><mml:math id="M18"><mml:msqrt><mml:mrow><mml:mo>&#x003B7;</mml:mo><mml:mo>/</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>B</mml:mi><mml:mi>L</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msqrt></mml:math></inline-formula>. Interestingly, increasing <italic>BL</italic> to 40 did not improve the network performance, whereas reducing it to 1 boosted the performance and a test error of about 1.3% is achieved. These results may be counter intuitive as one might expect the larger <italic>BL</italic> case to be less noisy and hence would perform better. However, for <italic>BL</italic> &#x0003D; 40 case, the amplification factors are smaller (<italic>C</italic><sub><italic>x</italic></sub> &#x0003D; <italic>C</italic><sub>&#x003B4;</sub> &#x0003D; 0.5) in order to satisfy the same learning rate on average. This reduces the probability of generating a pulse, but since the streams are longer during the update, the average update (or number of coincidences) and the variance do not change. In contrast, for <italic>BL</italic> &#x0003D; 1, the amplifications factors are larger with a value 3.16 and therefore pulse generation becomes more likely. Indeed, for cases in which the amplified values are larger than unity (<italic>C</italic><sub><italic>x</italic></sub><italic>x</italic><sub><italic>i</italic></sub> &#x0003E; 1 or <italic>C</italic><sub>&#x003B4;</sub> &#x003B4; <sub><italic>j</italic></sub> &#x0003E; 1) a single update pulse is always generated. This makes the updates more deterministic but with an earlier clipping for <italic>x</italic><sub><italic>i</italic></sub> and &#x003B4;<sub><italic>j</italic></sub> values encoded from the periphery. Also note that for a single update cycle the weight can change at most <italic>BL</italic>&#x000D7;&#x00394;<italic>w</italic><sub><italic>min</italic></sub> and for <italic>BL</italic> &#x0003D; 1 the weight value can only move by a single &#x00394;<italic>w</italic><sub><italic>min</italic></sub> per update cycle. However, also note that the convolutional layers <italic>K</italic><sub>1</sub> and <italic>K</italic><sub>2</sub> receive 576 and 64 single bit stochastic updates per image due to weight reuse (sharing) while the fully connected layers <italic>W</italic><sub>3</sub> and <italic>W</italic><sub>4</sub> receive only one single bit stochastic update per image. The interaction of all of these terms and the tradeoffs are non-trivial and the precise mechanism by which <italic>BL</italic> &#x0003D; 1 performs better than <italic>BL</italic> &#x0003D; 10 is still unclear. However, the empirical data shows clearly there is an advantage to be had for the above CNN architecture, which favors <italic>BL</italic> &#x0003D; 1; whereas the DNN used in Gokmen and Vlasov (<xref ref-type="bibr" rid="B17">2016</xref>) favored <italic>BL</italic> &#x0003D; 10. These results emphasize the importance of designing flexible hardware that can control the number of pulses used for the update cycle. We note that this flexibility can be achieved seamlessly for the stochastic update scheme without changing the design considerations for peripheral circuits generating the random pulses.</p>
<fig id="F5" position="float">
<label>Figure 5</label>
<caption><p>Average test error achieved between 25th and 30th epochs for a various RPU models with varying update schemes. Black data points correspond to updates with amplification factors that are equally distributed to the columns and the rows. Red data points correspond to models that uses the update management scheme. RPU-baseline with noise and bound management as well as the FP-baseline models are also included for comparison.</p></caption>
<graphic xlink:href="fnins-11-00538-g0005.tif"/>
</fig>
<p>In addition to <italic>BL</italic>, for the second set of simulations the amplification factors <italic>C</italic><sub><italic>x</italic></sub> and <italic>C</italic><sub>&#x003B4;</sub> used during the update cycle are also varied, to some extent, while keeping the average learning rate fixed. The above models all assume that equal values of <italic>C</italic><sub><italic>x</italic></sub> and <italic>C</italic><sub>&#x003B4;</sub> are used during updates; however, it is possible to use different values for <italic>C</italic><sub><italic>x</italic></sub> and <italic>C</italic><sub>&#x003B4;</sub> as long as the product satisfies &#x003B7;/(<italic>BL</italic> &#x00394;<italic>w</italic><sub><italic>min</italic></sub>). In our update management scheme, we use <italic>C</italic><sub><italic>x</italic></sub> and <italic>C</italic><sub>&#x003B4;</sub> values such that the probability of generating pulses from columns (<bold>x</bold>) and rows (<bold>&#x003B4;</bold>) are roughly the same order. This is achieved by rescaling the amplification factors with a ratio <inline-formula><mml:math id="M19"><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:msqrt><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x003B4;</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msqrt></mml:math></inline-formula>, and in this scheme the amplification factors can be written as <inline-formula><mml:math id="M20"><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mi>m</mml:mi><mml:msqrt><mml:mrow><mml:mo>&#x003B7;</mml:mo><mml:mo>/</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>B</mml:mi><mml:mi>L</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msqrt></mml:math></inline-formula> and <inline-formula><mml:math id="M21"><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x003B4;</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:mfrac></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:msqrt><mml:mrow><mml:mo>&#x003B7;</mml:mo><mml:mo>/</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>B</mml:mi><mml:mi>L</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msqrt></mml:math></inline-formula>. Although for <italic>BL</italic> &#x0003D; 10 this method did not yield any improvement, for <italic>BL</italic> &#x0003D; 1 the error rate as low as 1.1% is achieved; and hence shows that the proposed update management scheme can yield better performance.</p>
<p>This proposed update scheme does not alter the expected change in the weight value and therefore its benefits may not be obvious. Note that toward the end of training it is very likely that the range of values in columns (<bold>x</bold>) and rows (<bold>&#x003B4;</bold>) are very different; i.e., <bold>x</bold> have many elements close 1 (or &#x02212;1) whereas <bold>&#x003B4;</bold> may have elements very close to zero (<bold>&#x003B4; &#x0226A; 1</bold>). For this case if the same <italic>C</italic><sub><italic>x</italic></sub> and <italic>C</italic><sub>&#x003B4;</sub> are used, the updates become row-wise correlated. Although unlikely, the generation of a pulse for &#x003B4;<sub><italic>j</italic></sub> will result in many coincidences along the row <italic>j</italic>, as there are many pulses generated by different columns since many <italic>x</italic><sub><italic>i</italic></sub> values are close to unity. Our update management scheme eliminates these correlated updates by shifting the probabilities from columns to rows by simply rescaling the values used during the update. This can be viewed as using rescaled vectors (<italic>m</italic><bold>x</bold> and <bold>&#x003B4;</bold>/<italic>m</italic>) for the updates which are composed of values of roughly the same order. This update management scheme relies on a simple rescaling that is performed in the digital domain, and therefore does not change the design of the analog circuits needed for the update cycle. The additional computations introduced in the digital domain are not significant, and only require additional <italic>O</italic>(<italic>M</italic>) (or <italic>O</italic>(<italic>N</italic>)) operations, similar to the overhead associated with the noise management technique.</p>
</sec>
<sec>
<title>Results summary</title>
<p>The summary of CNN training results for various RPU models that use the above management techniques is shown in Figure <xref ref-type="fig" rid="F6">6</xref>. When all management techniques are disabled the RPU-baseline model can only achieve test errors above 10%. When noise and bound management techniques are implemented, this large error rate is reduced significantly to about 1.7% Additionally when the update management scheme is enabled, with a reduced bit length during updates, the model achieves a test error of 1.1%. Finally, the combination of all of the management techniques with the 13-device mapping on the second convolutional layer (<italic>K</italic><sub>2</sub>) brings the model&#x00027;s test error to 0.8%. The performance of this final RPU model is almost indistinguishable from the FP-baseline model and hence shows the successful application of RPU approach for training CNNs. We note that all these mitigation methods can be turned on selectively by simply programing the operations performed on digital circuits; and therefore can be applied to any network architecture beyond CNNs without changing design considerations for realistic technological implementations of the crossbar arrays and analog peripheral circuits.</p>
<fig id="F6" position="float">
<label>Figure 6</label>
<caption><p>Test error of CNN with the MNIST dataset. Open white circles correspond to the model with the training performed using the floating point numbers. Lines with different colors correspond to RPU-baseline model with different management techniques enabled progressively.</p></caption>
<graphic xlink:href="fnins-11-00538-g0006.tif"/>
</fig>
<p>We note that for all of the simulation results described above we do not include any non-linearity in the weight update as this effect is shown to be not important as long as the updates are symmetric in positive and negative directions (Agrawal et al., <xref ref-type="bibr" rid="B1">2016a</xref>; Gokmen and Vlasov, <xref ref-type="bibr" rid="B17">2016</xref>). In order to check the validity of this behavior for the above CNN architecture, we performed simulations using the blue model of Figure <xref ref-type="fig" rid="F6">6</xref> while including a weight dependent update rule with different functional forms &#x00394;<italic>w</italic><sub><italic>min</italic></sub>(<italic>w</italic><sub><italic>ij</italic></sub>) that included a linear or a quadratic dependence on weight value. Indeed this additional non-linear weight update rule does not cause any additional error even when &#x00394;<italic>w</italic><sub><italic>min</italic></sub> is varied by a factor of about 10 within the weight range.</p>
</sec>
</sec>
<sec id="s4">
<title>Discussion and conclusions</title>
<p>The application of RPU device concept for training CNNs requires a rearrangement of the kernel parameters and only after this rearrangement the inherent parallelism of the RPU array can be fully utilized for convolutional layers. A single vector operation performed on the RPU array is a constant time <italic>O</italic>(1) and independent of the array size, however, because of the weight sharing in convolutional layers, the RPU arrays are accessed several times, resulting in a series of vector operations performed on the array for all three cycles. These repeated vector operations introduce interesting challenges and opportunities while training CNNs on a RPU based hardware.</p>
<p>The array sizes, weight sharing factors (<italic>ws</italic>) and the number of multiply and add (MAC) operations performed at different layers for a relative simple but respectable CNN architecture AlexNet (Krizhevsky et al., <xref ref-type="bibr" rid="B22">2012</xref>) are shown in Table <xref ref-type="table" rid="T2">2</xref>. This architecture won the large-scale ImageNet competition by a large margin in 2012. We understand that there has been significant progress since 2012 and we only choose AlexNet architecture due to its simplicity and to illustrate interesting possibilities that RPU based hardware enables while designing new network architectures.</p>
<table-wrap position="float" id="T2">
<label>Table 2</label>
<caption><p>Array sizes, weight sharing factors and number of MACs performed for each layer for AlexNet<xref ref-type="table-fn" rid="TN2"><sup>&#x0002A;</sup></xref> (Krizhevsky et al., <xref ref-type="bibr" rid="B22">2012</xref>) architecture.</p></caption>
<table frame="hsides" rules="groups">
<thead><tr>
<th valign="top" align="left"><bold>Layer</bold></th>
<th valign="top" align="center"><bold>RPU array size (matrix size)</bold></th>
<th valign="top" align="center"><bold>Weight sharing factor (<italic>ws</italic>)</bold></th>
<th valign="top" align="center"><bold>MACs</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left"><italic>K</italic><sub>1</sub></td>
<td valign="top" align="center">96 &#x000D7; 363</td>
<td valign="top" align="center">3, 025</td>
<td valign="top" align="center">106 <italic>M</italic></td>
</tr>
<tr>
<td valign="top" align="left"><italic>K</italic><sub>2</sub></td>
<td valign="top" align="center">256 &#x000D7; 2, 400</td>
<td valign="top" align="center">729</td>
<td valign="top" align="center">448 <italic>M</italic></td>
</tr>
<tr>
<td valign="top" align="left"><italic>K</italic><sub>3</sub></td>
<td valign="top" align="center">384 &#x000D7; 2, 304</td>
<td valign="top" align="center">169</td>
<td valign="top" align="center">150 <italic>M</italic></td>
</tr>
<tr>
<td valign="top" align="left"><italic>K</italic><sub>4</sub></td>
<td valign="top" align="center">384 &#x000D7; 3, 456</td>
<td valign="top" align="center">169</td>
<td valign="top" align="center">224 <italic>M</italic></td>
</tr>
<tr>
<td valign="top" align="left"><italic>K</italic><sub>5</sub></td>
<td valign="top" align="center">256 &#x000D7; 3, 456</td>
<td valign="top" align="center">169</td>
<td valign="top" align="center">150 <italic>M</italic></td>
</tr>
<tr>
<td valign="top" align="left"><italic>W</italic><sub>6</sub></td>
<td valign="top" align="center">4, 096 &#x000D7; 9, 216</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">38 <italic>M</italic></td>
</tr>
<tr>
<td valign="top" align="left"><italic>W</italic><sub>7</sub></td>
<td valign="top" align="center">4, 096 &#x000D7; 4, 096</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">17 <italic>M</italic></td>
</tr>
<tr>
<td valign="top" align="left"><italic>W</italic><sub>8</sub></td>
<td valign="top" align="center">1, 000 &#x000D7; 4, 096</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">4 <italic>M</italic></td>
</tr>
<tr style="border-top: thin solid #000000;">
<td/>
<td/>
<td/>
<td valign="top" align="center"><italic>Total MACs</italic> &#x0003D; 1.14 <italic>G</italic></td>
</tr>
</tbody>
</table>
<table-wrap-foot>
<fn id="TN2">
<label>&#x0002A;</label>
<p><italic>Table assumes the weights that are originally distributed to two GPUs are contained into a single RPU array for each layer</italic>.</p></fn>
</table-wrap-foot>
</table-wrap>
<p>When AlexNet architecture runs on a conventional hardware (such as CPU, GPU or ASIC), the time to process a single image is dictated by the total number of MACs; therefore, the contributions of different layers to the total workload are additive, with <italic>K</italic><sub>2</sub> consuming about 40% of the workload. The total number of MACs is usually considered as the main metric that determines the training time, and hence, practitioners deliberately construct network architectures to keep the total number of MACs below a certain value. This constrains the choice of the number of kernels, and their dimension, for each convolutional layer as well as the size of the pooling layers. Assuming a compute bounded system, the time to process a single image on a conventional hardware can be estimated using the ratio of the total number of MACs to the performance metric of the corresponding hardware (<italic>Total MACs</italic>/<italic>Throughput</italic>).</p>
<p>In contrast to conventional hardware, when the same architecture runs on a RPU based hardware, the time to process a single image is not dictated by the total number of MACs. Rather, it is dominated by the largest weight reuse factor in the network. For the above example, the operations performed on the first convolutional <italic>K</italic><sub>1</sub> takes the longest time among all layers because of the large weight reuse factor of <italic>ws</italic> &#x0003D; 3, 025, although this layer has the smallest array size and comprises only 10% of the total number of MACs. Assuming a RPU based accelerator with many RPU arrays and pipeline stages between them, the average time to process a single image can be estimated as <italic>ws</italic>&#x000D7;<italic>t</italic><sub><italic>meas</italic></sub> using values from layer <italic>K</italic><sub>1</sub>, where <italic>t</italic><sub><italic>meas</italic></sub> is the measurement time corresponding to a single vector-matrix multiplication on the RPU array. First, this metric emphasizes the constant-time operation of RPU arrays as the training time is independent of the array sizes, the number of trainable parameters in the network, and the total number of MACs. This would enable practitioners to use increasing numbers of kernels, with larger dimensions, without significantly increase training times. These network configurations would be impossible to implement with conventional hardware. However, the same metric also highlights the importance of <italic>t</italic><sub><italic>meas</italic></sub> and <italic>ws</italic> for layer <italic>K</italic><sub>1</sub> which represents a serious bottleneck. Consequently, it is desirable to come up with strategies that reduce both parameters.</p>
<p>In order to reduce <italic>t</italic><sub><italic>meas</italic></sub> we first discuss designing small RPU arrays that can operate faster. It is clear that large arrays are favored in order to achieve high degree of parallelism for the vector operations. However, the parasitic resistance and capacitance of a typical transmission line with a thickness of 360 <italic>nm</italic> and a width of 200 <italic>nm</italic> limit the practical array size to 4, 096 &#x000D7; 4, 096 as discussed in Gokmen and Vlasov (<xref ref-type="bibr" rid="B17">2016</xref>). For an array of size 4, 096 &#x000D7; 4, 096 the measurement time of <italic>t</italic><sub><italic>meas</italic></sub> &#x0003D; 80<italic>ns</italic> is derived considering the acceptable noise threshold value, which is dominated by the thermal noise of RPU devices. Using the same noise analysis described in Gokmen and Vlasov (<xref ref-type="bibr" rid="B17">2016</xref>) the following inequality can be derived for the thermal noise limited read operation during the forward/backward cycles of an array of size <italic>N</italic> &#x000D7; <italic>N</italic>:</p>
<disp-formula id="E5"><label>(5)</label><mml:math id="M22"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mfrac><mml:mrow><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mrow><mml:mo>&#x003C3;</mml:mo></mml:mrow></mml:mfrac><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>6</mml:mn></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>06</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x0003C;</mml:mo><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mfrac><mml:mrow><mml:mo>&#x003B2;</mml:mo><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo>&#x003B2;</mml:mo><mml:mo>&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:mfrac></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow><mml:msqrt><mml:mrow><mml:mfrac><mml:mrow><mml:msubsup><mml:mrow><mml:mi>V</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup><mml:mtext>&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mi>N</mml:mi><mml:msub><mml:mrow><mml:mtext>&#x000A0;</mml:mtext><mml:mi>R</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mi>e</mml:mi><mml:mi>v</mml:mi><mml:mi>i</mml:mi><mml:mi>c</mml:mi><mml:mi>e</mml:mi></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub><mml:mi>T</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mfrac></mml:mrow></mml:msqrt></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <italic>R</italic><sub><italic>device</italic></sub> is the average device resistance, &#x003B2; is the resistance on/off ratio for an RPU device, and <italic>V</italic><sub><italic>in</italic></sub> is the input voltage used during read. For the same noise specification, it is clear that for a small array with 512 &#x000D7; 512 devices <italic>t</italic><sub><italic>meas</italic></sub> can be reduced to about 10<italic>ns</italic> for faster computations assuming all other parameters are fixed. It is not desirable to build an accelerator chip all composed of small arrays, as for a small array power and area are dominated by the peripheral circuits (mainly by ADCs); and therefore, a small array has worse power and area efficiency metrics compared to a large array. However, a bimodal design consisting of large and small size arrays achieves better hardware utilization and provides speed advantage while mapping architectures with significantly varying matrix dimensions. While the large arrays are used to map fully connected layers or large convolutional layers, for a convolutional layer such as <italic>K</italic><sub>1</sub> using the small array would be better a solution that provides a reduction in <italic>t</italic><sub><italic>meas</italic></sub> from 80 to 10 <italic>ns</italic>.</p>
<p>In order to reduce the weight reuse factor on <italic>K</italic><sub>1</sub>, next we discuss allocating two (or more) arrays for the first convolutional layer. When more than one array is allocated for the first convolutional layer the network can be forced to learn separate features on different arrays by properly directing the upper (left) and lower (right) portions of the image to separate arrays and by computing the error signals and the updates independently. Not only this allows the network to learn independent features for separate portions of the image and does not require any weight copy or synchronization between two arrays, but also for each array the weight reuse factor is reduced by a factor of 2. This reduces the time to process a single image while making the architecture more expressive. Alternatively, one could try to synchronize the two arrays by randomly shuffling the portions of the images that are processed by different arrays. This approach would force the network to learn same features on two arrays with same reduction of 2 in the weight reuse factor. These discussed subtle changes in the network architecture do not provide any speed advantage when run on a conventional hardware; and therefore, it highlights the interesting possibilities that a RPU based architecture provides.</p>
<p>In summary, we show that the RPU concept can be applied beyond fully connect networks and the RPU based accelerators are natural fit for training CNNs as well. These accelerators promise unprecedented speed and power benefits and hardware level parallelism as the number of trainable parameters increases. Because of the constant-time operation of RPU arrays, RPU based accelerators provide interesting network architecture choices without increasing training times. However, all of the benefits of an RPU array are tied to the analog nature of the computations performed, which introduces new challenges. We show that digitally-programmable management techniques are sufficient to eliminate the noise and bound limitations imposed on the array. Furthermore, their combination with the update management and device variability reduction techniques enable a successful application of the RPU concept for training CNNs. All the management techniques discussed in this paper are addressed in the digital domain without changing the design considerations for the array or for the supporting analog peripheral circuits. These techniques make RPU approach suitable for a wide variety of networks beyond convolutional or fully connected networks.</p>
</sec>
<sec id="s5">
<title>Author contributions</title>
<p>TG conceived the original idea, TG, MO, and WH developed methodology, analyzed and interpreted results, drafted and revised manuscript.</p>
<sec>
<title>Conflict of interest statement</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest. The reviewer AS and handling Editor declared their shared affiliation.</p>
</sec>
</sec>
</body>
<back>
<ack><p>We thank Jim Hannon for careful reading of our manuscript and many useful suggestions.</p>
</ack>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Agrawal</surname> <given-names>S.</given-names></name> <name><surname>Plimpton</surname> <given-names>S.</given-names></name> <name><surname>Hughart</surname> <given-names>D.</given-names></name> <name><surname>Hsia</surname> <given-names>A.</given-names></name> <name><surname>Richter</surname> <given-names>I.</given-names></name> <name><surname>Cox</surname> <given-names>J.</given-names></name> <etal/></person-group>. (<year>2016a</year>). <article-title>Resistive memory device requirements for a neural network accelerator</article-title>, in <source>IJCNN</source> (<publisher-loc>Vancouver</publisher-loc>).</citation>
</ref>
<ref id="B2">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Agrawal</surname> <given-names>S.</given-names></name> <name><surname>Quach</surname> <given-names>T.</given-names></name> <name><surname>Parekh</surname> <given-names>O.</given-names></name> <name><surname>Hsia</surname> <given-names>A.</given-names></name> <name><surname>DeBenedictis</surname> <given-names>E.</given-names></name> <name><surname>James</surname> <given-names>C.</given-names></name> <etal/></person-group>. (<year>2016b</year>). <article-title>Energy scaling advantages of resistive memory crossbar computation and its application to sparse coding</article-title>. <source>Front. Neurosci</source>. <volume>9</volume>:<fpage>484</fpage>. <pub-id pub-id-type="doi">10.3389/fnins.2015.00484</pub-id></citation>
</ref>
<ref id="B3">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Arima</surname> <given-names>Y.</given-names></name> <name><surname>Mashiko</surname> <given-names>K.</given-names></name> <name><surname>Okada</surname> <given-names>K.</given-names></name> <name><surname>Yamada</surname> <given-names>T.</given-names></name> <name><surname>Maeda</surname> <given-names>A.</given-names></name> <name><surname>Notani</surname> <given-names>H.</given-names></name> <etal/></person-group>. (<year>1991</year>). <article-title>A 336-neuron, 28 K-synapse, self-learning neural network chip with branch-neuron-unit architecture</article-title>. <source>IEEE J. Solid State Circ.</source> <volume>26</volume>, <fpage>1637</fpage>&#x02013;<lpage>1644</lpage>.</citation>
</ref>
<ref id="B4">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Burr</surname> <given-names>G.</given-names></name> <name><surname>Narayanan</surname> <given-names>P.</given-names></name> <name><surname>Shelby</surname> <given-names>R.</given-names></name> <name><surname>Sidler</surname> <given-names>S.</given-names></name> <name><surname>Boybat</surname> <given-names>I.</given-names></name> <name><surname>di Nolfo</surname> <given-names>C.</given-names></name> <etal/></person-group>. (<year>2015</year>). <article-title>Large-scale neural networks implemented with non-volatile memory as the synaptic weight element: comparative performance analysis (accuracy, speed, and power)</article-title>, <source>IEDM (International Electron Devices Meeting)</source> (<publisher-loc>Washington, DC</publisher-loc>).</citation>
</ref>
<ref id="B5">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Burr</surname> <given-names>G.</given-names></name> <name><surname>Shelby</surname> <given-names>R.</given-names></name> <name><surname>Sebastian</surname> <given-names>A.</given-names></name> <name><surname>Kim</surname> <given-names>S.</given-names></name> <name><surname>Kim</surname> <given-names>S.</given-names></name> <name><surname>Sidler</surname> <given-names>S.</given-names></name> <etal/></person-group>. (<year>2017</year>). <article-title>Neuromorphic computing using non-volatile memory</article-title>. <source>Adv. Phys. X</source> <volume>2</volume>, <fpage>89</fpage>&#x02013;<lpage>124</lpage>. <pub-id pub-id-type="doi">10.1080/23746149.2016.1259585</pub-id></citation>
</ref>
<ref id="B6">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Chen</surname> <given-names>P.</given-names></name> <name><surname>Kadetotad</surname> <given-names>D.</given-names></name> <name><surname>Xu</surname> <given-names>Z.</given-names></name> <name><surname>Mohanty</surname> <given-names>A.</given-names></name> <name><surname>Lin</surname> <given-names>B.</given-names></name> <name><surname>Ye</surname> <given-names>J.</given-names></name> <etal/></person-group>. (<year>2015a</year>). <article-title>Technology-design co-optimization of resistive cross-point array for accelerating learning algorithms on chip</article-title>, in <source>DATE</source> (<publisher-loc>Grenoble</publisher-loc>).</citation>
</ref>
<ref id="B7">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Chen</surname> <given-names>P.</given-names></name> <name><surname>Lin</surname> <given-names>B.</given-names></name> <name><surname>Wang</surname> <given-names>I.</given-names></name> <name><surname>Hou</surname> <given-names>I.</given-names></name> <name><surname>Ye</surname> <given-names>J.</given-names></name> <name><surname>Vrudhula</surname> <given-names>S.</given-names></name> <etal/></person-group>. (<year>2015b</year>). <article-title>Mitigating effects of non-ideal synaptic device characteristics for on-chip learning</article-title>, in <source>ICCAD &#x00027;15</source> (<publisher-loc>Austin, TX</publisher-loc>).</citation>
</ref>
<ref id="B8">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Chen</surname> <given-names>Y.</given-names></name> <name><surname>Luo</surname> <given-names>T.</given-names></name> <name><surname>Liu</surname> <given-names>S.</given-names></name> <name><surname>Zhang</surname> <given-names>S.</given-names></name> <name><surname>He</surname> <given-names>L.</given-names></name> <name><surname>Wang</surname> <given-names>J.</given-names></name> <etal/></person-group>. (<year>2014</year>). <article-title>DaDianNao: a machine-learning supercomputer</article-title>, in <source>47th Annual IEEE/ACM International Symposium on Microarchitecture</source> (<publisher-loc>Cambridge</publisher-loc>), <fpage>609</fpage>&#x02013;<lpage>622</lpage>.</citation>
</ref>
<ref id="B9">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Chi</surname> <given-names>P.</given-names></name> <name><surname>Li</surname> <given-names>S.</given-names></name> <name><surname>Xu</surname> <given-names>C.</given-names></name> <name><surname>Zhang</surname> <given-names>T.</given-names></name> <name><surname>Zhao</surname> <given-names>J.</given-names></name> <name><surname>Liu</surname> <given-names>Y.</given-names></name> <etal/></person-group>. (<year>2016</year>). <article-title>PRIME: a novel processing-in-memory architecture for neural network computation in ReRAM based main memory</article-title>, in <source>ISCA</source> (<publisher-loc>Seoul</publisher-loc>).</citation>
</ref>
<ref id="B10">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Coates</surname> <given-names>A.</given-names></name> <name><surname>Huval</surname> <given-names>B.</given-names></name> <name><surname>Wang</surname> <given-names>T.</given-names></name> <name><surname>Wu</surname> <given-names>D.</given-names></name> <name><surname>Ng</surname> <given-names>A.</given-names></name></person-group> (<year>2013</year>). <article-title>Deep learning with COTS HPC systems</article-title>, in <source>ICML</source> (<publisher-loc>Atlanta, GA</publisher-loc>).</citation>
</ref>
<ref id="B11">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Collobert</surname> <given-names>R.</given-names></name> <name><surname>Weston</surname> <given-names>J.</given-names></name> <name><surname>Bottou</surname> <given-names>L.</given-names></name> <name><surname>Karlen</surname> <given-names>M.</given-names></name> <name><surname>Kavukcuoglu</surname> <given-names>K.</given-names></name> <name><surname>Kuksa</surname> <given-names>P.</given-names></name></person-group> (<year>2012</year>). <article-title>Natural language processing (Almost) from scratch</article-title>. <source>J. Mach. Lear. Res.</source> <volume>12</volume>, <fpage>2493</fpage>&#x02013;<lpage>2537</lpage>.</citation>
</ref>
<ref id="B12">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Dean</surname> <given-names>J.</given-names></name> <name><surname>Corrado</surname> <given-names>G.</given-names></name> <name><surname>Monga</surname> <given-names>R.</given-names></name> <name><surname>Chen</surname> <given-names>K.</given-names></name> <name><surname>Devin</surname> <given-names>M.</given-names></name> <name><surname>Le</surname> <given-names>Q.</given-names></name> <etal/></person-group>. (<year>2012</year>). <article-title>Large scale distributed deep networks</article-title>, in <source>NIPS&#x00027;12</source> (<publisher-loc>Lake Tahoe, NV</publisher-loc>).</citation>
</ref>
<ref id="B13">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Emer</surname> <given-names>J.</given-names></name> <name><surname>Sze</surname> <given-names>V.</given-names></name> <name><surname>Che</surname> <given-names>Y.</given-names></name></person-group> (<year>2016</year>). <article-title>Tutorial on hardware architectures for deep neural networks</article-title>, in <source>IEEE/ACM International Symposium on Microarchitecture (MICRO-49)</source> (<publisher-loc>Taipei</publisher-loc>).</citation>
</ref>
<ref id="B14">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Fuller</surname> <given-names>E. J.</given-names></name> <name><surname>El Gabaly</surname> <given-names>F.</given-names></name> <name><surname>L&#x000E9;onard</surname> <given-names>F.</given-names></name> <name><surname>Agarwal</surname> <given-names>S.</given-names></name> <name><surname>Plimpton</surname> <given-names>S. J.</given-names></name> <name><surname>Jacobs-Gedrim</surname> <given-names>R. B.</given-names></name> <etal/></person-group>. (<year>2017</year>). <article-title>Li-Ion synaptic transistor for low power analog computing</article-title>. <source>Adv. Sci. News</source> <volume>29</volume>:<fpage>1604310</fpage>. <pub-id pub-id-type="doi">10.1002/adma.201604310</pub-id><pub-id pub-id-type="pmid">27874238</pub-id></citation>
</ref>
<ref id="B15">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Gaines</surname> <given-names>B.</given-names></name></person-group> (<year>1967</year>). <article-title>Stochastic computing</article-title>, in <source>Proceedings of the AFIPS Spring Joint Computer Conference</source> (<publisher-loc>Atlantic City, NJ</publisher-loc>).</citation>
</ref>
<ref id="B16">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gao</surname> <given-names>L.</given-names></name> <name><surname>Chen</surname> <given-names>P.</given-names></name> <name><surname>Yu</surname> <given-names>S.</given-names></name></person-group> (<year>2016</year>). <article-title>Demonstration of convolution kernel operation on resistive cross-point array</article-title>. <source>IEEE Electron. Device Lett.</source> <volume>37</volume>, <fpage>870</fpage>&#x02013;<lpage>873</lpage>. <pub-id pub-id-type="doi">10.1109/LED.2016.2573140</pub-id></citation>
</ref>
<ref id="B17">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gokmen</surname> <given-names>T.</given-names></name> <name><surname>Vlasov</surname> <given-names>Y.</given-names></name></person-group> (<year>2016</year>). <article-title>Acceleration of deep neural network training with resistive cross-point devices</article-title>. <source>Front. Neurosci</source>. <volume>10</volume>:<fpage>333</fpage>. <pub-id pub-id-type="doi">10.3389/fnins.2016.00333</pub-id><pub-id pub-id-type="pmid">27493624</pub-id></citation>
</ref>
<ref id="B18">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Gupta</surname> <given-names>S.</given-names></name> <name><surname>Agrawal</surname> <given-names>A.</given-names></name> <name><surname>Gopalakrishnan</surname> <given-names>K.</given-names></name> <name><surname>Narayanan</surname> <given-names>P.</given-names></name></person-group> (<year>2015</year>). <article-title>Deep learning with limited numerical precision</article-title>, in <source>ICML&#x00027;15 Proceedings of the 32nd International Conference on International Conference on Machine Learning, Vol. 37</source> (<publisher-loc>Lille</publisher-loc>), <fpage>1737</fpage>&#x02013;<lpage>1746</lpage>.</citation>
</ref>
<ref id="B19">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Gupta</surname> <given-names>S.</given-names></name> <name><surname>Zhang</surname> <given-names>W.</given-names></name> <name><surname>Wang</surname> <given-names>F.</given-names></name></person-group> (<year>2016</year>). <article-title>Model accuracy and runtime tradeoff in distributed deep learning: a systematic study</article-title>, in <source>IEDM</source> (<publisher-loc>San Francisco, CA</publisher-loc>).</citation>
</ref>
<ref id="B20">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>He</surname> <given-names>K.</given-names></name> <name><surname>Zhang</surname> <given-names>X.</given-names></name> <name><surname>Ren</surname> <given-names>S.</given-names></name> <name><surname>Sun</surname> <given-names>J.</given-names></name></person-group> (<year>2015</year>). <article-title>Delving deep into rectifiers: surpassing human-level performance on ImageNet classification</article-title>, in <source>2015 IEEE International Conference on Computer Vision (ICCV)</source> (<publisher-loc>Santiago</publisher-loc>).</citation>
</ref>
<ref id="B21">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hinton</surname> <given-names>G.</given-names></name> <name><surname>Deng</surname> <given-names>L.</given-names></name> <name><surname>Dahl</surname> <given-names>G.</given-names></name> <name><surname>Mohamed</surname> <given-names>A.</given-names></name> <name><surname>Jaitly</surname> <given-names>N.</given-names></name> <name><surname>Senior</surname> <given-names>A.</given-names></name> <etal/></person-group>. (<year>2012</year>). <article-title>Deep neural networks for acoustic modeling in speech recognition: the shared views of four research groups</article-title>. <source>IEEE Signal Process. Mag.</source> <fpage>82</fpage>&#x02013;<lpage>97</lpage>. <pub-id pub-id-type="doi">10.1109/MSP.2012.2205597</pub-id></citation>
</ref>
<ref id="B22">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Krizhevsky</surname> <given-names>A.</given-names></name> <name><surname>Sutskever</surname> <given-names>I.</given-names></name> <name><surname>Hinton</surname> <given-names>G.</given-names></name></person-group> (<year>2012</year>). <article-title>Imagenet classification with deep convolutional neural networks</article-title>, <source>NIPS</source> (<publisher-loc>Lake Tahoe, NV</publisher-loc>), <fpage>1097</fpage>&#x02013;<lpage>1105</lpage>.</citation>
</ref>
<ref id="B23">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kuzum</surname> <given-names>D.</given-names></name> <name><surname>Yu</surname> <given-names>S.</given-names></name> <name><surname>Wong</surname> <given-names>H.-S. P.</given-names></name></person-group> (<year>2013</year>). <article-title>Synaptic electronics: materials, devices and applications</article-title>. <source>Nanotechnology</source> <volume>24</volume>:<fpage>382001</fpage>. <pub-id pub-id-type="doi">10.1088/0957-4484/24/38/382001</pub-id><pub-id pub-id-type="pmid">23999572</pub-id></citation>
</ref>
<ref id="B24">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Le</surname> <given-names>Q.</given-names></name> <name><surname>Ranzato</surname> <given-names>M.</given-names></name> <name><surname>Monga</surname> <given-names>R.</given-names></name> <name><surname>Devin</surname> <given-names>M.</given-names></name> <name><surname>Chen</surname> <given-names>K.</given-names></name> <name><surname>Corrado</surname> <given-names>G.</given-names></name> <etal/></person-group>. (<year>2012</year>). <article-title>Building high-level features using large scale unsupervised learning</article-title>, in <source>International Conference on Machine Learning</source> (<publisher-loc>Edinburgh</publisher-loc>).</citation>
</ref>
<ref id="B25">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>LeCun</surname> <given-names>Y.</given-names></name> <name><surname>Bengio</surname> <given-names>Y.</given-names></name> <name><surname>Hinton</surname> <given-names>G.</given-names></name></person-group> (<year>2015</year>). <article-title>Deep learning</article-title>. <source>Nature</source> <volume>521</volume>, <fpage>436</fpage>&#x02013;<lpage>444</lpage>. <pub-id pub-id-type="doi">10.1038/nature14539</pub-id><pub-id pub-id-type="pmid">26017442</pub-id></citation>
</ref>
<ref id="B26">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>LeCun</surname> <given-names>Y.</given-names></name> <name><surname>Bottou</surname> <given-names>L.</given-names></name> <name><surname>Bengio</surname> <given-names>Y.</given-names></name> <name><surname>Haffner</surname> <given-names>P.</given-names></name></person-group> (<year>1988</year>). <article-title>Gradient-based learning applied to document recognition</article-title>. <source>Proceed. IEEE</source> <volume>86</volume>, <fpage>2278</fpage>&#x02013;<lpage>2324</lpage>. <pub-id pub-id-type="doi">10.1109/5.726791</pub-id></citation>
</ref>
<ref id="B27">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lehmann</surname> <given-names>C.</given-names></name> <name><surname>Viredaz</surname> <given-names>M.</given-names></name> <name><surname>Blayo</surname> <given-names>F.</given-names></name></person-group> (<year>1993</year>). <article-title>A generic systolic array building block for neural networks with on-chip learning</article-title>. <source>IEEE Trans. Neural Netw.</source> <volume>4</volume>, <fpage>400</fpage>&#x02013;<lpage>407</lpage>. <pub-id pub-id-type="doi">10.1109/72.217181</pub-id><pub-id pub-id-type="pmid">18267742</pub-id></citation>
</ref>
<ref id="B28">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Merced-Grafals</surname> <given-names>E. J.</given-names></name> <name><surname>D&#x000E1;vila</surname> <given-names>N.</given-names></name> <name><surname>Ge</surname> <given-names>N.</given-names></name> <name><surname>Williams</surname> <given-names>R. S.</given-names></name> <name><surname>Strachan</surname> <given-names>J. P.</given-names></name></person-group> (<year>2016</year>). <article-title>Repeatable, accurate, and high speed multi-level programming of memristor 1T1R arrays for power efficient analog computing applications</article-title>. <source>Nanotechnology</source> <volume>27</volume>:<fpage>365202</fpage>. <pub-id pub-id-type="doi">10.1088/0957-4484/27/36/365202</pub-id><pub-id pub-id-type="pmid">27479054</pub-id></citation>
</ref>
<ref id="B29">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Merkel</surname> <given-names>C.</given-names></name> <name><surname>Kudithipudi</surname> <given-names>D.</given-names></name></person-group> (<year>2014</year>). <article-title>A stochastic learning algorithm for neuromemristive systems</article-title>, in <source>27th IEEE International System-on-Chip Conference (SOCC)</source> (<publisher-loc>Seattle, WA</publisher-loc>).</citation>
</ref>
<ref id="B30">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Poppelbaum</surname> <given-names>W.</given-names></name> <name><surname>Afuso</surname> <given-names>C.</given-names></name> <name><surname>Esch</surname> <given-names>J.</given-names></name></person-group> (<year>1967</year>). <article-title>Stochastic computing elements and systems</article-title>, in <source>Proceedings of the AFIPS Fall Joint Computer Conference</source> (<publisher-loc>Atlantic City, NJ</publisher-loc>).</citation>
</ref>
<ref id="B31">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Prezioso</surname> <given-names>M.</given-names></name> <name><surname>Merrikh-Bayat</surname> <given-names>F.</given-names></name> <name><surname>Hoskins</surname> <given-names>B. D.</given-names></name> <name><surname>Adam</surname> <given-names>G. C.</given-names></name> <name><surname>Likharev</surname> <given-names>K. K.</given-names></name> <name><surname>Strukov</surname> <given-names>D. B.</given-names></name></person-group> (<year>2015</year>). <article-title>Training and operation of an integrated neuromorphic network based on metal-oxide memristors</article-title>. <source>Nature</source> <volume>521</volume>, <fpage>61</fpage>&#x02013;<lpage>64</lpage>. <pub-id pub-id-type="doi">10.1038/nature14441</pub-id><pub-id pub-id-type="pmid">25951284</pub-id></citation>
</ref>
<ref id="B32">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Rumelhart</surname> <given-names>D.</given-names></name> <name><surname>Hinton</surname> <given-names>G.</given-names></name> <name><surname>Williams</surname> <given-names>R.</given-names></name></person-group> (<year>1986</year>). <article-title>Learning representations by back-propagating errors</article-title>. <source>Nature</source> <volume>323</volume>, <fpage>533</fpage>&#x02013;<lpage>536</lpage>. <pub-id pub-id-type="doi">10.1038/323533a0</pub-id></citation>
</ref>
<ref id="B33">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Seo</surname> <given-names>J.</given-names></name> <name><surname>Lin</surname> <given-names>B.</given-names></name> <name><surname>Kim</surname> <given-names>M.</given-names></name> <name><surname>Chen</surname> <given-names>P.-Y.</given-names></name> <name><surname>Kadetotad</surname> <given-names>D.</given-names></name> <name><surname>Xu</surname> <given-names>Z.</given-names></name> <etal/></person-group>. (<year>2015</year>). <article-title>On-chip sparse learning acceleration with CMOS and resistive synaptic devices</article-title>. <source>IEEE Trans. Nanotechnol.</source> <volume>14</volume>, <fpage>969</fpage>&#x02013;<lpage>979</lpage>. <pub-id pub-id-type="doi">10.1109/TNANO.2015.2478861</pub-id></citation>
</ref>
<ref id="B34">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Simonyan</surname> <given-names>K.</given-names></name> <name><surname>Zisserman</surname> <given-names>A.</given-names></name></person-group> (<year>2015</year>). <article-title>Very deep convolutional networks for large-scale image</article-title>, in <source>ICLR</source> (<publisher-loc>San Diego, CA</publisher-loc>).</citation>
</ref>
<ref id="B35">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Soudry</surname> <given-names>D.</given-names></name> <name><surname>Di Castro</surname> <given-names>D.</given-names></name> <name><surname>Gal</surname> <given-names>A.</given-names></name> <name><surname>Kolodny</surname> <given-names>A.</given-names></name> <name><surname>Kvatinsky</surname> <given-names>S.</given-names></name></person-group> (<year>2015</year>). <article-title>Memristor-based multilayer neural networks with online gradient descent training</article-title>. <source>IEEE Trans. Neural. Netw. Learn. Syst</source>. <volume>26</volume>, <fpage>2408</fpage>&#x02013;<lpage>2421</lpage>. <pub-id pub-id-type="doi">10.1109/TNNLS.2014.2383395</pub-id><pub-id pub-id-type="pmid">25594981</pub-id></citation>
</ref>
<ref id="B36">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Steinbuch</surname> <given-names>K.</given-names></name></person-group> (<year>1961</year>). <article-title>Die Lernmatrix</article-title>. <source>Kybernetik</source> <volume>1</volume>, <fpage>36</fpage>&#x02013;<lpage>45</lpage>. <pub-id pub-id-type="doi">10.1007/BF00293853</pub-id></citation>
</ref>
<ref id="B37">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Szegedy</surname> <given-names>C.</given-names></name> <name><surname>Liu</surname> <given-names>W.</given-names></name> <name><surname>Jia</surname> <given-names>Y.</given-names></name> <name><surname>Sermanet</surname> <given-names>P.</given-names></name> <name><surname>Reed</surname> <given-names>S.</given-names></name> <name><surname>Anguelov</surname> <given-names>D.</given-names></name> <etal/></person-group>. (<year>2015</year>). <article-title>Going deeper with convolutions</article-title>, in <source>CVPR</source> (<publisher-loc>Boston, MA</publisher-loc>).</citation>
</ref>
<ref id="B38">
<citation citation-type="other"><person-group person-group-type="author"><name><surname>Wu</surname> <given-names>R.</given-names></name> <name><surname>Yan</surname> <given-names>S.</given-names></name> <name><surname>Shan</surname> <given-names>Y.</given-names></name> <name><surname>Dang</surname> <given-names>Q.</given-names></name> <name><surname>Sun</surname> <given-names>G.</given-names></name></person-group> (<year>2015</year>). <source>Deep Image: Scaling up Image Recognition</source>. arXiv:1501.02876 [cs.CV].</citation>
</ref>
<ref id="B39">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Xu</surname> <given-names>Z.</given-names></name> <name><surname>Mohanty</surname> <given-names>A.</given-names></name> <name><surname>Chen</surname> <given-names>P.</given-names></name> <name><surname>Kadetotad</surname> <given-names>D.</given-names></name> <name><surname>Lin</surname> <given-names>B.</given-names></name> <name><surname>Ye</surname> <given-names>J.</given-names></name> <etal/></person-group>. (<year>2014</year>). <article-title>Parallel programming of resistive cross-point array for synaptic plasticity</article-title>. <source>Proc. Comput. Sci.</source> <volume>41</volume>, <fpage>126</fpage>&#x02013;<lpage>133</lpage>. <pub-id pub-id-type="doi">10.1016/j.procs.2014.11.094</pub-id></citation>
</ref>
</ref-list>
</back>
</article>