<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xml:lang="EN" 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.2022.757125</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>GrapHD: Graph-Based Hyperdimensional Memorization for Brain-Like Cognitive Learning</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Poduval</surname> <given-names>Prathyush</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/1439827/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Alimohamadi</surname> <given-names>Haleh</given-names></name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
</contrib>
<contrib contrib-type="author">
<name><surname>Zakeri</surname> <given-names>Ali</given-names></name>
<xref ref-type="aff" rid="aff3"><sup>3</sup></xref>
</contrib>
<contrib contrib-type="author">
<name><surname>Imani</surname> <given-names>Farhad</given-names></name>
<xref ref-type="aff" rid="aff4"><sup>4</sup></xref>
</contrib>
<contrib contrib-type="author">
<name><surname>Najafi</surname> <given-names>M. Hassan</given-names></name>
<xref ref-type="aff" rid="aff5"><sup>5</sup></xref>
</contrib>
<contrib contrib-type="author">
<name><surname>Givargis</surname> <given-names>Tony</given-names></name>
<xref ref-type="aff" rid="aff3"><sup>3</sup></xref>
</contrib>
<contrib contrib-type="author" corresp="yes">
<name><surname>Imani</surname> <given-names>Mohsen</given-names></name>
<xref ref-type="aff" rid="aff3"><sup>3</sup></xref>
<xref ref-type="corresp" rid="c001"><sup>&#x0002A;</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/1392248/overview"/>
</contrib>
</contrib-group>
<aff id="aff1"><sup>1</sup><institution>Indian Institute of Science</institution>, <addr-line>Bangalore</addr-line>, <country>India</country></aff>
<aff id="aff2"><sup>2</sup><institution>Department of Bioengineering, University of California, Los Angeles</institution>, <addr-line>Los Angeles, CA</addr-line>, <country>United States</country></aff>
<aff id="aff3"><sup>3</sup><institution>Department of Computer Science, University of California, Irvine</institution>, <addr-line>Irvine, CA</addr-line>, <country>United States</country></aff>
<aff id="aff4"><sup>4</sup><institution>Department of Mechanical Engineering, University of Connecticut</institution>, <addr-line>Storrs, CT</addr-line>, <country>United States</country></aff>
<aff id="aff5"><sup>5</sup><institution>School of Computing and Informatics, University of Louisiana</institution>, <addr-line>Lafayette, LA</addr-line>, <country>United States</country></aff>
<author-notes>
<fn fn-type="edited-by"><p>Edited by: Mostafa Rahimi Azghadi, James Cook University, Australia</p></fn>
<fn fn-type="edited-by"><p>Reviewed by: Haitong Li, Stanford University, United States; Keshab K. Parhi, University of Minnesota Twin Cities, United States</p></fn>
<corresp id="c001">&#x0002A;Correspondence: Mohsen Imani <email>m.imani&#x00040;uci.edu</email></corresp>
<fn fn-type="other" id="fn001"><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>04</day>
<month>02</month>
<year>2022</year>
</pub-date>
<pub-date pub-type="collection">
<year>2022</year>
</pub-date>
<volume>16</volume>
<elocation-id>757125</elocation-id>
<history>
<date date-type="received">
<day>11</day>
<month>08</month>
<year>2021</year>
</date>
<date date-type="accepted">
<day>03</day>
<month>01</month>
<year>2022</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x000A9; 2022 Poduval, Alimohamadi, Zakeri, Imani, Najafi, Givargis and Imani.</copyright-statement>
<copyright-year>2022</copyright-year>
<copyright-holder>Poduval, Alimohamadi, Zakeri, Imani, Najafi, Givargis and Imani</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) and the copyright owner(s) 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>Memorization is an essential functionality that enables today&#x00027;s machine learning algorithms to provide a high quality of learning and reasoning for each prediction. Memorization gives algorithms prior knowledge to keep the context and define confidence for their decision. Unfortunately, the existing deep learning algorithms have a weak and nontransparent notion of memorization. Brain-inspired HyperDimensional Computing (HDC) is introduced as a model of human memory. Therefore, it mimics several important functionalities of the brain memory by operating with a vector that is computationally tractable and mathematically rigorous in describing human cognition. In this manuscript, we introduce a brain-inspired system that represents HDC memorization capability over a graph of relations. We propose <sans-serif>GrapHD</sans-serif>, hyperdimensional memorization that represents graph-based information in high-dimensional space. <sans-serif>GrapHD</sans-serif> defines an encoding method representing complex graph structure while supporting both weighted and unweighted graphs. Our encoder spreads the information of all nodes and edges across into a full holistic representation so that no component is more responsible for storing any piece of information than another. Then, <sans-serif>GrapHD</sans-serif> defines several important cognitive functionalities over the encoded memory graph. These operations include memory reconstruction, information retrieval, graph matching, and shortest path. Our extensive evaluation shows that <sans-serif>GrapHD</sans-serif>: (1) significantly enhances learning capability by giving the notion of short/long term memorization to learning algorithms, (2) enables cognitive computing and reasoning over memorization graph, and (3) enables holographic brain-like computation with substantial robustness to noise and failure.</p></abstract>
<kwd-group>
<kwd>brain-inspired computing</kwd>
<kwd>hyperdimensional computing (HDC)</kwd>
<kwd>neuromorphic computing</kwd>
<kwd>machine leaning</kwd>
<kwd>memorization</kwd>
</kwd-group>
<counts>
<fig-count count="14"/>
<table-count count="0"/>
<equation-count count="15"/>
<ref-count count="81"/>
<page-count count="20"/>
<word-count count="14894"/>
</counts>
</article-meta>
</front>
<body>
<sec sec-type="intro" id="s1">
<title>1. Introduction</title>
<p>We face increasing needs for efficient processing for diverse cognitive tasks using a vast volume of generated data (Bonomi et al., <xref ref-type="bibr" rid="B5">2012</xref>; Chen and Lin, <xref ref-type="bibr" rid="B8">2014</xref>). Therefore, there is a crucial need for scalable algorithms to learn and reason about each prediction on today&#x00027;s embedded devices. Particularly, memorization is an essential functionality that enables today&#x00027;s algorithms to provide a higher quality of learning and reason for each prediction or decision. Memorization gives learning and information processing algorithms prior knowledge to keep the context and define confidence. Unfortunately, existing deep learning algorithms have a weak and nontransparent notion of memorization. Although Recurrent Neural Network (RNNs) and Long Short-Term Memory networks (LSTMs) incorporate memorization, they are very difficult to train and still not fully transparent to explore on prior knowledge (Pascanu et al., <xref ref-type="bibr" rid="B61">2013</xref>; Sodhani et al., <xref ref-type="bibr" rid="B75">2020</xref>).</p>
<p>There are also other crucial challenges with existing memorization techniques. Running algorithms that incorporate memorization (e.g., RNNs and LSTMs) often results in extremely slow processing speed and high energy consumption or needs a large cluster of application-specific integrated chips (ASIC), e.g., deep learning on Google TPU (Jouppi et al., <xref ref-type="bibr" rid="B36">2017</xref>). This computation complexity is beyond the capability of resource-constraint embedded devices. In addition, edge devices often rely on unreliable battery-based sources, fault-tolerant memory and logics, and noisy wireless communication (Van Kranenburg and Bassi, <xref ref-type="bibr" rid="B78">2012</xref>; Lee and Lee, <xref ref-type="bibr" rid="B49">2015</xref>). Unfortunately, today&#x00027;s algorithms require high precision training and have almost no robustness to such noise and failure. For example, the existing RNNs and LSTMs require high-precision floating-point representation to train (Courbariaux et al., <xref ref-type="bibr" rid="B11">2014</xref>; Micikevicius et al., <xref ref-type="bibr" rid="B54">2017</xref>). This makes these algorithms highly sensitive to possible noise or failure.</p>
<p>Recently, HyperDimensional Computing (HDC) has been introduced as an alternative computational model that mimics important brain functionalities toward high-efficiency and noise-tolerant computation (Kanerva, <xref ref-type="bibr" rid="B38">2009</xref>). Unlike deep learning, HDC is a model of the Cerebellum cortex that biologically represents human memory. HDC is motivated by the observation that the cerebellum cortex operates on high-dimensional data representations (Zou et al., <xref ref-type="bibr" rid="B80">2021a</xref>). In HDC, objects are thereby encoded with high-dimensional vectors, called <italic>hypervectors</italic>, which have thousands of elements (Rahimi et al., <xref ref-type="bibr" rid="B67">2016b</xref>; Imani et al., <xref ref-type="bibr" rid="B29">2017a</xref>, <xref ref-type="bibr" rid="B28">2019b</xref>). HDC incorporates learning capability along with typical memory functions of storing/loading information. It mimics several important functionalities of the human memory model with vector operations which are computationally tractable and mathematically rigorous in describing human cognition. The natural memorization capability enables HDC to provide several advantages as compared to the conventional deep learning solutions: (1) HDC is suitable for on-device learning based on hardware acceleration due to its highly parallel nature (Li et al., <xref ref-type="bibr" rid="B50">2016</xref>; Imani et al., <xref ref-type="bibr" rid="B32">2017b</xref>; Hern&#x000E1;ndez-Cano et al., <xref ref-type="bibr" rid="B26">2021b</xref>), (2) hidden features of information can be well-exposed, thereby empowering both training and inference with the light-weight computation and a small number of iterations (Rahimi et al., <xref ref-type="bibr" rid="B65">2016a</xref>; Mitrokhin et al., <xref ref-type="bibr" rid="B55">2019</xref>), and (3) the hypervector representation inherently exhibits strong robustness against the noise and corrupted data (Imani et al., <xref ref-type="bibr" rid="B32">2017b</xref>; Frady and Sommer, <xref ref-type="bibr" rid="B14">2019</xref>; Frady et al., <xref ref-type="bibr" rid="B13">2020</xref>).</p>
<p>HDC has been employed as a part of many applications, including genomics (Kim et al., <xref ref-type="bibr" rid="B42">2020</xref>; Poduval et al., <xref ref-type="bibr" rid="B64">2021a</xref>), signal processing (Karunaratne et al., <xref ref-type="bibr" rid="B41">2021</xref>), robotics (Mitrokhin et al., <xref ref-type="bibr" rid="B55">2019</xref>; Neubert et al., <xref ref-type="bibr" rid="B58">2019</xref>), and sensor fusion (R&#x000E4;s&#x000E4;nen and Saarinen, <xref ref-type="bibr" rid="B69">2015</xref>), manufacturing (Chen et al., <xref ref-type="bibr" rid="B7">2021</xref>), and detection/recognition tasks (Genssler and Amrouch, <xref ref-type="bibr" rid="B19">2021</xref>). Although HDC is a memory model, existing algorithms do not well exploit HDC memorization capability. For example, in all existing HDC algorithms, memorization has a weak definition of information accumulation. However, as has been shown by neuroscientists, the brain has a more complex definition (O&#x00027;reilly and Munakata, <xref ref-type="bibr" rid="B60">2000</xref>; Hassabis et al., <xref ref-type="bibr" rid="B23">2017</xref>; Chai et al., <xref ref-type="bibr" rid="B6">2018</xref>). Our brain naturally clusters data and represents information as a graph structure, where objects and edges show the correlation between objects (Wiecki et al., <xref ref-type="bibr" rid="B79">2015</xref>; Bassett and Sporns, <xref ref-type="bibr" rid="B1">2017</xref>). Over time, these memory graphs get larger and more complex while the brain automatically forgets or approximates old information (Chien and Honey, <xref ref-type="bibr" rid="B10">2020</xref>). In addition, the brain has a highly approximate but ultra-fast mechanism to retrieve information (Schacter and Slotnick, <xref ref-type="bibr" rid="B73">2004</xref>). Although we can implement and represent a graph using existing database and graph processing systems (Lumsdaine et al., <xref ref-type="bibr" rid="B52">2007</xref>; Sahu et al., <xref ref-type="bibr" rid="B72">2017</xref>), such a system will be highly complex, costly, non-scalable, and far from biological systems.</p>
<p>Prior research works have already attempted to use vector symbolic architecture and hyperdimensional computing to represent and process graph knowledge. Work in Gayler (<xref ref-type="bibr" rid="B16">1998</xref>) exploited hyperdimensional computing for graph representation. This method is designed specifically for graph isomorphism and cannot support complex information extraction from graph representation. Work in Ma et al. (<xref ref-type="bibr" rid="B53">2018</xref>) used holographic reduced representation (HRR) to map graphs into high-dimensional space. However, this approach relies on external learning algorithms, i.e., neural networks, to extract knowledge from the graph. As a result, the HRR encoding mainly acts as a latent space encoding rather than a memory to store graph information. Another existing direction focused on finding a graph embedding in real vector space (Nickel et al., <xref ref-type="bibr" rid="B59">2016</xref>). By characterizing the similarity of the nodes using some loss function, the dot product between vectors is proportional to the similarity, which can be used for knowledge learning. However, this approach is quite costly as it requires gradient descent. In addition, it is not suitable for graph memorization.</p>
<p>This paper defines a brain-inspired system that better represents HDC memorization capability. We introduce, <sans-serif>GrapHD</sans-serif>, a graph-based hyperdimensional system that encodes graphs into high-dimensional space and enables reasoning on that graph. We use high-dimensional vectors to holographically represent the nodes and memorize the graph. <sans-serif>GrapHD</sans-serif> enables several cognitive functionalities to operate over compressed encoded graph directly. The main contributions of the paper are listed as follow:</p>
<list list-type="bullet">
<list-item><p><sans-serif>GrapHD</sans-serif> defines an encoding method that represents complex graph-based data structure into high-dimensional space. <sans-serif>GrapHD</sans-serif> supports a wide range of memory graphs, including weighted and unweighted graphs. Our encoder spreads the information of all nodes and edges across into a full holistic representation so that no component is more responsible for storing any piece of information than another. This brain-like holographic representation enables us to define highly efficient and robust cognitive operations over the encoded graph without accessing original data.</p></list-item>
<list-item><p>Using this memorization model, we introduce an inference process that can be used to recover the graph information from graph hypervector. Our reconstruction process is iterative in nature and relies on noise prediction and cancellation. <sans-serif>GrapHD</sans-serif> defines several important cognitive functionalities over the encoded memory graph. These operations include memory reconstruction, information retrieval, graph matching, and shortest path.</p></list-item>
<list-item><p>We propose the idea of graph refinement that increases the capacity of memorization. Inspired by human memorization, refinement iteratively checks and strengthens the already known knowledge. This ensures that the known information, e.g., graph nodes and their connections, is well memorized. We design a statistical model that mathematically defines the capacity of a hypervector to perform the tasks mentioned earlier.</p></list-item>
<list-item><p>We also develop an in-memory architecture that operates as a tensor processor to accelerate <sans-serif>GrapHD</sans-serif> computation. Our architecture supports row-parallel NOR-based operation over binary vectors stored in non-volatile memory. Then, we extend it to enable complex operations and accelerate various <sans-serif>GrapHD</sans-serif> applications.</p></list-item>
</list>
<p>We evaluate <sans-serif>GrapHD</sans-serif> on a wide range of applications. Our evaluation shows that <sans-serif>GrapHD</sans-serif> memorization capability not only enhances the reasoning capability of existing machine learning systems but also improves the learning accuracy. For example, we offer <sans-serif>GrapHD</sans-serif> application to enhance the existing CNN model for the object detection task. Our results show that <sans-serif>GrapHD</sans-serif> achieves 3.8 &#x000D7; faster training and 1.7 &#x000D7; faster inference than RNN, while ensuring the same classification accuracy. Our evaluation also shows that our in-memory accelerator achieves 30.4 &#x000D7; faster and 61.5 &#x000D7; higher energy efficiency as compared to NVIDIA 1080 GPU. We also run <sans-serif>GrapHD</sans-serif> operations with the Nengo SPA module (Bekolay et al., <xref ref-type="bibr" rid="B2">2014</xref>) to simulate how <sans-serif>GrapHD</sans-serif> can be adapted for Neuromorphic hardware, and use it to run our novel error correcting decoding process. This provides feasibility for <sans-serif>GrapHD</sans-serif> model to be used as the encoding for Neuromorphic models of the brain. An example where this can be used is SPAUN (Stewart et al., <xref ref-type="bibr" rid="B76">2012</xref>), which is a spiking neural network which can perform multiple tasks without requiring re-wiring. SPAUN encodes the query information using Semantic Pointer Architecture which is then fed into the neural network, and <sans-serif>GrapHD</sans-serif> can be used as the encoder to better memorize relationships and correlations thus expanding the cognitive abilities of SPAUN. A few examples where a graph representation is natural is analyzing relationships in social media and knowledge graph representations (Pitas, <xref ref-type="bibr" rid="B62">2016</xref>; Bi et al., <xref ref-type="bibr" rid="B3">2019</xref>; Chian et al., <xref ref-type="bibr" rid="B9">2021</xref>). Our model can also be used in graph constructions, where the Spiking Neural Network is supposed to construct graph representations of data, or to construct certain sub-graphs and clusters of an input graph based on certain rules and correlations.</p>
</sec>
<sec id="s2">
<title>2. Preliminary</title>
<p><bold>Hyperdimensional Computing:</bold> The brain&#x00027;s circuits are massive in terms of numbers of neurons and synapses, suggesting that large circuits are fundamental to the brain&#x00027;s computing. Hyperdimensional computing (HDC) (Kanerva, <xref ref-type="bibr" rid="B38">2009</xref>) explores this idea by looking at computing with ultra-wide words&#x02014;that is, with very high-dimensional vectors or hypervectors. The fundamental units of computation in HDC are high dimensional representations of data known as &#x0201C;hypervectors,&#x0201D; which are constructed from raw signals using an encoding procedure. There exist a huge number of different, nearly orthogonal hypervectors with the dimensionality in the thousands (Kanerva, <xref ref-type="bibr" rid="B37">1998</xref>; Ge and Parhi, <xref ref-type="bibr" rid="B18">2020</xref>). This lets us combine such hypervectors into a new hypervector using well-defined vector space operations while keeping the information of the two with high probability. Hypervectors are holographic and (pseudo) random with i.i.d. components. A hypervector contains all the information combined and spread across all its components in a full holistic representation so that no element is more responsible for storing any piece of information than another.</p>
<p>In recent years, HDC or in general vector symbolic architecture has been employed in a range of applications, such as classification (Kanerva et al., <xref ref-type="bibr" rid="B39">2000</xref>; Ge and Parhi, <xref ref-type="bibr" rid="B18">2020</xref>; Zou et al., <xref ref-type="bibr" rid="B81">2021b</xref>), activity recognition (Kim et al., <xref ref-type="bibr" rid="B43">2018</xref>), biomedical signal processing (Moin et al., <xref ref-type="bibr" rid="B56">2021</xref>), multimodal sensor fusion (R&#x000E4;s&#x000E4;nen and Saarinen, <xref ref-type="bibr" rid="B69">2015</xref>), distributed sensors (Kleyko and Osipov, <xref ref-type="bibr" rid="B44">2014</xref>; Kleyko et al., <xref ref-type="bibr" rid="B45">2018</xref>), voice recognition (Imani et al., <xref ref-type="bibr" rid="B29">2017a</xref>), genomics (Kim et al., <xref ref-type="bibr" rid="B42">2020</xref>; Poduval et al., <xref ref-type="bibr" rid="B64">2021a</xref>), regression (Hern&#x000E1;ndez-Cano et al., <xref ref-type="bibr" rid="B25">2021a</xref>), and privacy (H&#x000E9;rnandez-Cano et al., <xref ref-type="bibr" rid="B24">2021</xref>). For example, work in Simpkin et al. (<xref ref-type="bibr" rid="B74">2017</xref>) used vector symbolic architecture for representing and orchestrating complex decentralized workflows. Work in Rallapalli et al. (<xref ref-type="bibr" rid="B68">2019</xref>) developed a novel embedding mechanism for single graph nodes that co-learns graph structure and textual descriptions. A key HDC advantage is its training capability in one or few shots, where object categories are learned from one or few examples and in a single pass over the training data instead of many iterations. HDC has achieved comparable to higher accuracy compared to support vector machines (SVMs) (Rahimi et al., <xref ref-type="bibr" rid="B66">2018</xref>; Imani et al., <xref ref-type="bibr" rid="B28">2019b</xref>), gradient boosting (Imani et al., <xref ref-type="bibr" rid="B30">2019c</xref>), and convolutional neural networks (CNNs) (Mitrokhin et al., <xref ref-type="bibr" rid="B55">2019</xref>), as well as lower execution energy on embedded processors, compared to SVMs (Montagna et al., <xref ref-type="bibr" rid="B57">2018</xref>), CNNs and long short-term memory (Imani et al., <xref ref-type="bibr" rid="B28">2019b</xref>).</p>
<p><bold>Holographic Graph Representation:</bold> There are existing research works focused on high-dimensional and holographic graph representation. Work in Gayler and Levy (<xref ref-type="bibr" rid="B17">2009</xref>) represented graphs in an HDC model by binding together vertices to represent edges and adding the vectors together. However, they specified only a single graph isomorphism problem that can be solved using their model, without specifying how their model can be generalized to solve additional problems. On the other hand, our model provides an end-to-end framework to perform various operations and problems that can be solved purely using HDC operations. Moreover, we also provide a novel method to recover the bundled information that is stored in the graph memory. This method uses the iterative noise canceling method, where the results at one iteration are used to guess the noise in the next iteration. Additionally, we also discuss a memory refinement process that can be used to expand the capacity of our hypervectors.</p>
<p>Work in Ma et al. (<xref ref-type="bibr" rid="B53">2018</xref>) used holographic reduced representation to map nodes into high-dimensional space. This mapping, which is based on HRR, aims to learn graph as latent space; thus, it does not explicitly memorize the graph. The inference process is done using a 2-layered neural network. As a result, this representation relies on a neural network and is primarily suited for learning. In contrast, in our method, the learning, inference, and memorization tasks can be performed using native HDC operations. This makes our architecture robust, efficient, and scalable and enables us to retrieve desired information more transparently.</p>
<p>Work in Nickel et al. (<xref ref-type="bibr" rid="B59">2016</xref>) introduced a method to find an embedding of a graph in a vector space. A graph embedding is usually a learning process to find vector representations of graphs such that the vectors representing two nodes are correlated based on the nodes&#x00027; similarity within the graph. This representation is obtained using the gradient descent method, which is computationally costly. In addition, the vector generated as graph representation has very low dimensionality, e.g., <italic>D</italic> &#x0003D; 150. In contrast, we define it entirely differently as we do not find a graph embedding. Our solution chooses random hypervectors to represent each node and uses them to build up graph memory. Our model is able to represent information and perform cognitive and inference operations using orthogonality of random hypervectors. We only perform the tasks and decoding using native HDC operations like bundling, binding, and similarity search.</p>
<sec>
<title>2.1. Hyperdimensional Primitives</title>
<p>Let us assume <inline-formula><mml:math id="M1"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>, <inline-formula><mml:math id="M2"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> are two randomly generated hypervectors (<inline-formula><mml:math id="M3"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover><mml:mo>&#x02208;</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mo>&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mi>D</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula>) and <inline-formula><mml:math id="M4"><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x02248;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula> (&#x003B4; is similarity metric defined below).</p>
<p><bold>Binding (&#x0002A;)</bold> of two hypervectors <inline-formula><mml:math id="M5"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> and <inline-formula><mml:math id="M6"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> is done by component-wise multiplication (<monospace>XOR</monospace> in binary) and denoted as <inline-formula><mml:math id="M7"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> &#x0002A; <inline-formula><mml:math id="M8"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>. The result of the operation is new hypervector that is dissimilar to its constituent vectors i.e., <inline-formula><mml:math id="M9"><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x02248;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>; thus binding is well suited for associating two hypervectors. Binding is used for variable-value association and, more generally, for mapping.</p>
<p><bold>Bundling (&#x0002B;)</bold> operation is done via component-wise addition of hypervectors, denoted as <inline-formula><mml:math id="M10"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>. The bundling is a memorization function that keeps the information of input data into a bundled vector. The bundled hypervectors preserves similarity to its component hypervectors, i.e., <inline-formula><mml:math id="M11"><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0003E;</mml:mo><mml:mo>&#x0003E;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>. Hence, the majority function is well suited for representing sets. Note that the vector that we get after bundling will have integer components, and will be an element of &#x02124;<sup><italic>D</italic></sup> in general. We do not clip the values of the components back to &#x000B1;1.</p>
<p><bold>Permutation (</bold>&#x003C1;<bold>)</bold> operation, <inline-formula><mml:math id="M12"><mml:mi>&#x003C1;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, shuffles components of <inline-formula><mml:math id="M13"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula> with a random permutation of the <italic>D</italic> components of the hypervector, with &#x003C1;<sup><italic>p</italic></sup> defined as &#x003C1; applied <italic>p</italic> times. The intriguing property of the permutation is that it creates a near-orthogonal and <italic>reversible</italic> hypervector to <inline-formula><mml:math id="M14"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula>, i.e., <inline-formula><mml:math id="M15"><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>&#x003C1;</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x02243;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula> when <italic>p</italic> &#x02260; 0 and <inline-formula><mml:math id="M16"><mml:msup><mml:mrow><mml:mi>&#x003C1;</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mi>p</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>&#x003C1;</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula>. Thus, we can use it to represent <italic>sequences</italic> and <italic>orders</italic>.</p>
<p><bold>Reasoning</bold> is done by measuring the similarity of hypervectors. We denote the similarity with <inline-formula><mml:math id="M17"><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x000B7;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:mi>D</mml:mi></mml:math></inline-formula>, where <inline-formula><mml:math id="M18"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> and <inline-formula><mml:math id="M19"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> are two hypervectors, and &#x000B7; denotes the dot product.</p>
</sec>
<sec>
<title>2.2. Motivation and Overview</title>
<p>As neuroscientists have already shown, the human brain memorizes events as a sparse memory graph (Reijneveld et al., <xref ref-type="bibr" rid="B70">2007</xref>; George, <xref ref-type="bibr" rid="B20">2008</xref>; Tijms et al., <xref ref-type="bibr" rid="B77">2013</xref>), where nodes are the objects/events, and the edges represent the correlation between them. The brain does reasoning and analogy by referring to this memory as prior knowledge. For example, as humans, when we see a set of events or objects repeatedly occurring together, these objects get a higher correlation in our graph memory. By referring to this memory, we can identify the correlated objects, make better decisions, and reason about them.</p>
<p>Although building up this graph is often easy, the main challenges are: (1) how to effectively represent this graph to enable highly efficient and robust brain-like memorization, and (2) how to perform information retrieval and reasoning on such representation. Unlike the existing graph processing algorithms that perform costly exact computations, brain memorization and cognitive computation are highly approximate and efficient.</p>
<p>In this paper, we propose <sans-serif>GrapHD</sans-serif>, a hyperdimensional graph memory that enables robust, efficient, and holographic cognitive learning. <xref ref-type="fig" rid="F1">Figure 1</xref> shows an overview of <sans-serif>GrapHD</sans-serif>. <sans-serif>GrapHD</sans-serif> encodes various graph data into high-dimensional space (<xref ref-type="fig" rid="F1">Figure 1A</xref>). The encoding is based on a well-defined set of mathematics introduced in Section 2.1. Our encoding represents a graph using a single hypervector, where each dimension represents a neuron. <sans-serif>GrapHD</sans-serif> enables a wide range of cognitive operations directly over the graph hypervector (<xref ref-type="fig" rid="F1">Figure 1B</xref>). These cognitive operations extract information from the graph without explicit access to original nodes. We exploit these functionalities to enable several applications, including graph matching, shortest path, and object detection (<xref ref-type="fig" rid="F1">Figure 1C</xref>).</p>
<fig id="F1" position="float">
<label>Figure 1</label>
<caption><p><sans-serif>GrapHD</sans-serif> overview: <bold>(A)</bold> hyperdimensional graph encoding into a hypervector, <bold>(B)</bold> <sans-serif>GrapHD</sans-serif> cognitive operations, and <bold>(C)</bold> <sans-serif>GrapHD</sans-serif> applications.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0001.tif"/>
</fig>
</sec>
</sec>
<sec id="s3">
<title>3. Hyperdimensional Graph Representation</title>
<p>In this section, we explain how to represent graph structure in high-dimensional space. We exploit hyperdimensional mathematics, introduced in Section 2.1, to spread the graph information across the fully holistic high-dimensional representation. In this representation, no hypervector element is more responsible for storing any piece of information than another. Here, we explain how <sans-serif>GrapHD</sans-serif> encodes both weighted and unweighted graphs.</p>
<sec>
<title>3.1. Unweighted Undirected Graphs</title>
<p><xref ref-type="fig" rid="F2">Figure 2</xref> shows the functionality of <sans-serif>GrapHD</sans-serif> encoding representing unweighted graphs. We first assign a random hypervector <inline-formula><mml:math id="M20"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> to each node in the graph (<xref ref-type="fig" rid="F2">Figure 2A</xref>). Assuming a graph with <italic>V</italic> nodes and <italic>E</italic> edges, we generate <inline-formula><mml:math id="M21"><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x022EF;</mml:mo><mml:mspace width="0.3em" class="thinspace"/><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>V</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula> as high-dimensional signature of nodes, where <inline-formula><mml:math id="M22"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> is a <italic>D</italic>&#x02212;dimensional hypervector whose components are randomly chosen from the set {&#x02212;1, &#x0002B;1}. Due to random generation, the node hypervectors are nearly orthogonal: <inline-formula><mml:math id="M23"><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x02243;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula> (<italic>k</italic> &#x02260; <italic>l</italic>), where &#x003B4; denotes the similarity defined in Section 2.1. This non-zero similarity is the noise in our model which can result in misprediction. The role of noise in our model is further elaborated in Section 4.1.</p>
<fig id="F2" position="float">
<label>Figure 2</label>
<caption><p>Graph memory encoding in <sans-serif>GrapHD</sans-serif>: <bold>(A)</bold> node hypervector generation, <bold>(B)</bold> creating a node memory, and <bold>(C)</bold> graph memory generation.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0002.tif"/>
</fig>
<p>We exploit the node hypervectors to create a memory for each node. The node memory needs to remember all connections that a particular node has to its neighbors (<xref ref-type="fig" rid="F2">Figure 2B</xref>). For example, we construct the node <italic>i</italic> memory by accumulating all node hypervectors connected to it: <inline-formula><mml:math id="M24"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, where <italic>j</italic> represents all the neighbors of node <italic>i</italic>. Thanks to HDC mathematics, the bundling keeps the information of all connections. For example, we can check if memory node <italic>i</italic> has connection to node <italic>k</italic> using: <inline-formula><mml:math id="M25"><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, where &#x003B4; &#x0226B; 0 and &#x003B4; &#x02243; 0 show existence and non-existence, respectively. This is explained in Section 4.1 in detail.</p>
<p>After generating a memory for each node, we construct a single hypervector representing a graph. The graph memory should memorize the information of nodes and their connections. To this end, for each node, we associate the node and memory hypervectors, e.g., <inline-formula><mml:math id="M26"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> for node <italic>i</italic>. The bundling of all associated hypervectors generates a graph memory (<xref ref-type="fig" rid="F2">Figure 2C</xref>):</p>
<disp-formula id="E1"><mml:math id="M27"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:mo>&#x022EF;</mml:mo><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>V</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>V</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right"><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mstyle displaystyle="true"><mml:munderover accentunder="false" accent="false"><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>V</mml:mi></mml:mrow></mml:munderover></mml:mstyle><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where the graph memory is a compressed, invertible, and transparent model. Note that we have introduced a factor of <inline-formula><mml:math id="M28"><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac></mml:math></inline-formula> because if we expand the node memory, then <inline-formula><mml:math id="M29"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and <inline-formula><mml:math id="M30"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> will be counted twice. Given the graph memory <inline-formula><mml:math id="M31"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula>, we can reconstruct a local node memory using:</p>
<disp-formula id="E2"><mml:math id="M32"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:mi>n</mml:mi><mml:mi>o</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>e</mml:mi><mml:mo>&#x02248;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></disp-formula>
<p>where this approximate equality holds true because the HD vectors are randomly constructed; thus, they are nearly orthogonal. Once we have the node memory, we can check if nodes <italic>j</italic> and <italic>i</italic> are connected by calculating the similarity <inline-formula><mml:math id="M33"><mml:mi>R</mml:mi><mml:mo>=</mml:mo><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, where <italic>R</italic> is termed as the decision score. If there exists an edge between <italic>i</italic> and <italic>j</italic>, then <italic>R</italic> &#x0007E; 1. Otherwise, <italic>R</italic> &#x0007E; 0.</p>
</sec>
<sec>
<title>3.2. Unweighted, Directed Graphs</title>
<p>We use a similar encoding method as an undirected graph to build up each memory node. Since the graph is directed, each memory only bundles the connections out of the node. These memory nodes need to be combined to represent a graph. Unlike a undirected graph, the memory needs to preserve the sequence that nodes are connected together. Therefore, we construct the graph memory as: <inline-formula><mml:math id="M34"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:msubsup><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:mi>&#x003C1;</mml:mi><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, where &#x003C1; is a permutation that permutes the node memory once, which is used to preserve the order of association. The edge between <italic>i</italic> and <italic>j</italic> is not treated the same as the edge between <italic>j</italic> and <italic>i</italic> because the permutation makes the binding a non-commutative operation. Therefore, compared to undirected graphs, there is no factor <inline-formula><mml:math id="M35"><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac></mml:math></inline-formula> to construct the graph memory for directed graphs.</p>
</sec>
<sec>
<title>3.3. Weighted Graphs</title>
<p>In weighted graphs, the connection between nodes is represented using real values. To ensure holographic representation, our encoding needs to first represent those weights into hypervectors. <xref ref-type="fig" rid="F3">Figure 3</xref> shows <sans-serif>GrapHD</sans-serif> encoding for a node memory. Let us assume all weights in graph are normalized values [0, 1). we exploit stochastic representation to construct the vectors <inline-formula><mml:math id="M36"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> for a real number <italic>a</italic> &#x02208; [0, 1). We generate <inline-formula><mml:math id="M37"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> as a random hypervector representing a value 1 and exploit that to generate weight hypervectors. For example, we generate <inline-formula><mml:math id="M38"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> by randomly choosing (1 &#x02212; <italic>a</italic>) &#x000D7; <italic>D</italic> dimensions of <inline-formula><mml:math id="M39"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>, and multiplying them by &#x02212;1. We define this evaluation of <inline-formula><mml:math id="M40"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> as: <inline-formula><mml:math id="M41"><mml:mi>f</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>=</mml:mo><mml:mi>a</mml:mi></mml:math></inline-formula>, where the final equality follows from the definition of <inline-formula><mml:math id="M42"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. Although the randomness of weight hypervectors affects the robustness, the randomness makes this method undesirable when we look at the iterative method of decoding the node memory. The key problem is that slightly different values <italic>a</italic> will result in completely orthogonal vectors, which will eventually take up a lot of capacity. To avoid the above drawbacks, we generate <inline-formula><mml:math id="M43"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> by flipping the components from (<italic>a</italic> &#x000D7; <italic>D</italic>)<sup><italic>th</italic></sup> to the <italic>D</italic><sup><italic>th</italic></sup> component of <inline-formula><mml:math id="M44"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>. We note that we round <italic>a</italic> &#x000D7; <italic>D</italic> to the closest integer (<xref ref-type="fig" rid="F3">Figure 3B</xref>). The evaluation function remains the same and provides the same result as before. This encoding is purely deterministic with respect to the weight value. Moreover, nearby values will generate correlated orthogonal vectors. As a result, we do not lose the capacity here and can represent a large set of weights.</p>
<fig id="F3" position="float">
<label>Figure 3</label>
<caption><p>Node memory encoding in <sans-serif>GrapHD</sans-serif> for weighted graph: <bold>(A)</bold> node hypervector generation, <bold>(B)</bold> creating weight hypervectors, and <bold>(C)</bold> node memory generation.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0003.tif"/>
</fig>
<p>Using stochastic weight representation, we can construct the node memory using <inline-formula><mml:math id="M45"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><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:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> (<xref ref-type="fig" rid="F3">Figure 3C</xref>). In this manner, we can store the weights in a holographic way such that the values of the weights do not bias the encoding. This is purely done using an end-to-end compatible HD framework.</p>
</sec>
<sec>
<title>3.4. Graph Memory Refinement</title>
<p>The brain is weak in one-pass memorization, as we often need multiple reviews of the same document to memorize the details. HDC also may not memorize every detail of a graph by single-time encoding and memorization (Gallistel and King, <xref ref-type="bibr" rid="B15">2011</xref>; Ji et al., <xref ref-type="bibr" rid="B35">2020</xref>). To ensure the information is well-memorized, HDC should look at a graph iteratively and strengthen nodes&#x00027; information and connection. We name this process as <italic>memory refinement</italic>. In HDC, the model memorizes connections between nodes by bundling together hypervectors that represent different edges. However, these hypervectors are not perfectly orthogonal with each other. As a result, during the decision process, when the model calculates the similarity of a connection with the memory, the noise from the different connections can accumulate. This can lead to two possibilities: (1) the similarity of an existing node goes below a decision threshold, and (2) the similarity of a non-existing node goes above the threshold. These possibilities can result in misprediction of the connection.</p>
<p>The problem is that given a node vector <italic>i</italic>, we need to recognize which other nodes have vertices to node <italic>i</italic>. In other words, we need to check which memory nodes include the node <italic>i</italic> hypervector. This can be done by calculating the similarity of all memory nodes with node <italic>i</italic> hypervector:</p>
<disp-formula id="E3"><mml:math id="M46"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>R</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</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>R</italic><sub><italic>ij</italic></sub> is called the decision score. As described in Section 4.1, if <italic>R</italic><sub><italic>ij</italic></sub> is greater than <italic>T</italic> (called a decision threshold), then we conclude that <inline-formula><mml:math id="M47"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> exists in <inline-formula><mml:math id="M48"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. Our expectation is that all local memories which include node <italic>i</italic> should get a higher similarity than a threshold (<italic>R</italic> &#x0003E; <italic>T</italic>). The refinement procedure is done in multiple iterations. In each iteration, we chose a node <italic>i</italic> with node hypervector <inline-formula><mml:math id="M49"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. Then, we go through the local memories of all the nodes <italic>j</italic> and perform the following update procedure</p>
<disp-formula id="E4"><mml:math id="M50"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x02192;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mtext class="textrm" mathvariant="normal">&#x000A0;&#x000A0;If&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mi>R</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0003C;</mml:mo><mml:mi>T</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mtext class="textrm" mathvariant="normal">but&#x000A0;</mml:mtext><mml:mi>j</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mtext class="textrm" mathvariant="normal">and&#x000A0;</mml:mtext><mml:mi>i</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mtext class="textrm" mathvariant="normal">share an edge</mml:mtext></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x02192;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mtext class="textrm" mathvariant="normal">&#x000A0;&#x000A0;If&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mi>R</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0003E;</mml:mo><mml:mi>T</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mtext class="textrm" mathvariant="normal">but&#x000A0;</mml:mtext><mml:mi>j</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mtext class="textrm" mathvariant="normal">and&#x000A0;</mml:mtext><mml:mi>i</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mtext class="textrm" mathvariant="normal">do not share an edge</mml:mtext></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>By this operation, we aim to strengthen the memory of the connections that are weakly memorized. However, refinement may result in some other connections being mispredicted. To prevent this, we perform memory refinement in an iterative manner until we converge into a final memory model. Note that the refined memory is an integer component hypervector.</p>
<p>Refinement is a process that is used in almost all other HD problems too, and is more commonly called Retraining. Almost all HD models require retraining to make them stronger in memory. Usually, retraining is implemented in models that use association search, where we match a query with multiple classes (For example, in classification tasks). Then, we subtract the query from the class with which it does not belong (with a factor proportional to similarity) and we add the query to the class with which it belongs if the similarity is not high enough. This results in a large separation between the similarity of the matching classes and mismatching classes with a query, which is the aim.</p>
<p>However, GraphHD uses a thresholding-based method to check if an node or edge exists (Based on Section 4.1 and 4.3, respectively) in the graph memory. For this, we need an alternative way of refinement which is different from the retraining used in the traditional context. This is why in our model we subtract or add the edge vector pairs to the graph memory based on whether the similarity is above or below the threshold, as described in the previous paragraph. Our aim here is not to differentiate between the classes, but to separate the signal distribution from the noise.</p>
<p>In Section 6.2, we show the impact of the memory refinement on increasing the hypervector capacity to memorize larger graphs.</p>
</sec>
</sec>
<sec id="s4">
<title>4. Algorithms With GraphHD Representation</title>
<p>We perform several important cognitive functionalities over the memory graph to extract information or reason based on that. We discuss a few key capabilities which have a wide range of applications in robotic, genomics, signal processing, and machine learning. All tasks can be directly implemented over a single graph memory hypervector without storing original nodes or their connection. In other words, we will show how a single graph hypervector can answer several cognitive questions in a fast and efficient way. In the following, we demonstrate the algorithms only for an undirected unweighted graphs. However, the algorithms described can be extended to directed and weighted graphs without much difficulty. For directed graphs, we would have an additional step of applying an inverse permutation when reconstructing the node memory from graph memory, and using the permutation while checking existence of edge inside the graph memory. For the weighted graphs, we need to recover the weight of the edge using the similarity search, and then define a reasonable threshold for the similarity above which we can confidently conclude the edge actually exists inside the graph (and that the measure similarity is not the noise). We generate graphs randomly by first considering a fully connected graphs, and then deleting a random but uniformly chosen set of edges.</p>
<sec>
<title>4.1. Information Retrieval</title>
<p>The main objective of information retrieval is to extract information about the edges connected to a node and the information associated with each node. We devise a statistical framework to study the errors and data recovery. Given the graph memory <inline-formula><mml:math id="M51"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula>, we can use this to reconstruct the node memory. Using the node memory, we run inference to find the two main quantities&#x02014;the nodes that share an edge with the current node and the information that has been associated with the current node via binding.</p>
<p>First, we consider the task of identifying whether a node <italic>A</italic> is connected to node <italic>B</italic> given the node memory <inline-formula><mml:math id="M52"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. The node memory can be written as <inline-formula><mml:math id="M53"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, where <inline-formula><mml:math id="M54"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> is the hypervectors of all the nodes connected to <italic>A</italic> and <italic>d</italic><sub><italic>A</italic></sub> is the degree of the node <italic>A</italic>. If the hypervector of node <italic>B</italic> is given by <inline-formula><mml:math id="M55"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, then we calculate the decision score <italic>R</italic> given by:</p>
<disp-formula id="E5"><label>(1)</label><mml:math id="M56"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mi>R</mml:mi><mml:mo>=</mml:mo><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:munder><mml:mrow><mml:mstyle displaystyle="true"><mml:munder accentunder="false"><mml:mrow><mml:mstyle displaystyle="true"><mml:munderover accentunder="false" accent="false"><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x02260;</mml:mo><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:munderover></mml:mstyle><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo>&#x0FE38;</mml:mo></mml:munder></mml:mstyle></mml:mrow><mml:mrow><mml:mi>N</mml:mi><mml:mi>o</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>e</mml:mi></mml:mrow></mml:munder></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:mstyle displaystyle="true"><mml:munder><mml:mrow><mml:mstyle displaystyle="true"><mml:munder accentunder="false"><mml:mrow><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo>&#x0FE38;</mml:mo></mml:munder></mml:mstyle></mml:mrow><mml:mrow><mml:mi>s</mml:mi><mml:mi>i</mml:mi><mml:mi>g</mml:mi><mml:mi>n</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi></mml:mrow></mml:munder></mml:mstyle></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>This is for the case that the node <italic>B</italic> is connected to node <italic>A</italic>. If not, then the signal term would become part of the noise term. The similarity between two random hypervectors can be written as <inline-formula><mml:math id="M57"><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>D</mml:mi></mml:mrow></mml:mfrac><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>D</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mi>a</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:math></inline-formula> where <italic>a</italic><sub><italic>i</italic></sub> are random variables with values uniformly sampled from {&#x02212;1, &#x0002B;1}. As a result by the central limit theorem, <inline-formula><mml:math id="M58"><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>D</mml:mi></mml:mrow></mml:mfrac><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>D</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mi>a</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:math></inline-formula> is a Gaussian distribution with mean 0 and standard deviation <inline-formula><mml:math id="M59"><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:msqrt><mml:mrow><mml:mi>D</mml:mi></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac></mml:math></inline-formula>. Thus, by the central limit theorem again we get that</p>
<disp-formula id="E6"><mml:math id="M60"><mml:mstyle displaystyle="true"><mml:munderover accentunder="false" accent="false"><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">N</mml:mi></mml:mrow></mml:mrow></mml:munderover></mml:mstyle><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0007E;</mml:mo><mml:mi>N</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:msqrt><mml:mrow><mml:mfrac><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">N</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mi>D</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:msqrt></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></disp-formula>
<p>Where <inline-formula><mml:math id="M61"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula> and <inline-formula><mml:math id="M62"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">V</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> are randomly chosen vectors, and <inline-formula><mml:math id="M63"><mml:mrow><mml:mi mathvariant="-tex-caligraphic">N</mml:mi></mml:mrow></mml:math></inline-formula> is an integer. Thus, in the case that <italic>A</italic> and <italic>B</italic> have an edge connecting them, then the decision score <italic>R</italic> follows a Gaussian <inline-formula><mml:math id="M64"><mml:mi>N</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:msqrt><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mi>D</mml:mi></mml:mrow></mml:msqrt></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> distribution. When there is no edge between <italic>A</italic> and <italic>B</italic>, then <italic>R</italic> follows a Gaussian <inline-formula><mml:math id="M65"><mml:mi>N</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:msqrt><mml:mrow><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mi>D</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:msqrt></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> distribution. Using this, we can construct a theoretical Receiver operating characteristic (ROC) curve and then define a threshold value <italic>T</italic>. If <italic>R</italic> &#x0003E; <italic>T</italic>, then we can conclude that nodes <italic>A</italic> and <italic>B</italic> have an edge between them, and if <italic>R</italic> &#x0003C; <italic>T</italic> then we can conclude that there is no edge between <italic>A</italic> and <italic>B</italic>.</p>
<p><xref ref-type="fig" rid="F4">Figure 4A</xref> shows the similarity distribution of existing patterns (blue color, called signal) and non-existing patterns (orange color, called noise) in the reference or memorized hypervector. Both signal and noise follow Gaussian distribution, where the spread is an effect of interference noise as shown in Equation 1. To identify the existence of a pattern, our goal is to put a threshold that can separate signal and noise distribution. <xref ref-type="fig" rid="F4">Figure 4B</xref> shows the ROC curve indicating the impact of threshold value on true and false-positive rates. Ideally, we want the ROC curve to pass through the left-top corner, where true and false positive rates are 100 and 0%, respectively. The sharp turning point would represent the optimal scenario. However, the ROC would be less sharp if we decreased the dimensionality. For example, in <italic>D</italic> &#x0003D; 1<italic>k</italic>, signal and noise will have wider distribution; thus, the perfect true positive rate can only be obtained with a very high false-positive rate.</p>
<fig id="F4" position="float">
<label>Figure 4</label>
<caption><p>Information retrieval <bold>(A)</bold> Distribution of signal and noise during information retrieval, and <bold>(B)</bold> ROC curves for different dimensionalities.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0004.tif"/>
</fig>
</sec>
<sec>
<title>4.2. Node Memory Reconstruction</title>
<p>In this section, we discuss an iterative method to recover the node memory from the graph hypervector in an error-correcting way. The main idea is to first formulate a reasonable estimation of all node memories using the unbinding procedure. Then, we find a revised estimate for all the nodes by recursively canceling out the interference noise. <xref ref-type="fig" rid="F5">Figure 5</xref> shows <sans-serif>GrapHD</sans-serif> functionality for node memory reconstruction. Suppose we are given the graph memory hypervector <inline-formula><mml:math id="M66"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula>. The first estimation of node memory <italic>i</italic> can be computed as, <inline-formula><mml:math id="M67"><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msubsup></mml:math></inline-formula> (<inline-graphic xlink:href="fnins-16-757125-i0001.tif"/>):</p>
<disp-formula id="E7"><label>(2)</label><mml:math id="M68"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:mstyle displaystyle="true"><mml:munder><mml:mrow><mml:mstyle displaystyle="true"><mml:munder accentunder="false"><mml:mrow><mml:mstyle displaystyle="true"><mml:munder><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>j</mml:mi><mml:mo>&#x02260;</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:munder></mml:mstyle><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x0FE38;</mml:mo></mml:munder></mml:mstyle></mml:mrow><mml:mrow><mml:mo>&#x02243;</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:munder></mml:mstyle><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Here, we use the fact that <inline-formula><mml:math id="M69"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> because <inline-formula><mml:math id="M70"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> is a bipolar vector. This equation gives us the first estimation of all node memories (<inline-graphic xlink:href="fnins-16-757125-i0002.tif"/>), which is often noisy. The noise comes from the nearly orthogonal distribution of node hypervectors. Through an iterative process, we can start reducing the cross-interference noise (<inline-graphic xlink:href="fnins-16-757125-i0003.tif"/>). In each iteration, we find an estimation of memory nodes, <inline-formula><mml:math id="M71"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> (<italic>j</italic> &#x02260; <italic>i</italic>), and deduct that noise from the next estimation. For example, we can recursively construct the following vectors (<inline-graphic xlink:href="fnins-16-757125-i0004.tif"/>):</p>
<disp-formula id="E8"><label>(3)</label><mml:math id="M72"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:munder><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>j</mml:mi><mml:mo>&#x02260;</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:munder></mml:mstyle><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msubsup></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="E9"><label>(4)</label><mml:math id="M73"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:munder><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>j</mml:mi><mml:mo>&#x02260;</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:munder></mml:mstyle><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msubsup></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>The guess for the (<italic>k</italic> &#x0002B; 1)<sup><italic>th</italic></sup> step is constructed by first subtracting the guess from the <italic>k</italic><sup><italic>th</italic></sup> step, which minimizes the error. For example, <inline-formula><mml:math id="M74"><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:math></inline-formula> is the revised estimate that we get from <inline-formula><mml:math id="M75"><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:math></inline-formula> (the first estimation) to cancel the noise. This process is repeated until we reach convergence. Section 6.4 explores the impact of different parameters on the quality of node memory reconstruction.</p>
<fig id="F5" position="float">
<label>Figure 5</label>
<caption><p>Node memory reconstruction. <bold>(A)</bold> node hypervectors, <bold>(B)</bold> estimated node memory based on node hypervectors, <bold>(C)</bold> cross-interference noise estimation, and <bold>(D)</bold> recursive noise cancellation in graph memory.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0005.tif"/>
</fig>
<p><bold>Mathematical Capacity:</bold> The accuracy of error reconstruction models depends primarily on two parameters: the number of edges of the graph, <italic>n</italic>, and the dimension of hypervectors, <italic>D</italic>. If there are more edges in the graph, then the cross-terms can contribute a higher value of noise in the iterative reconstruction step. A way to measure the noise can be done using the Signal Noise Ratio. Suppose that each node has on average <italic>d</italic> &#x0003D; <italic>E</italic>/<italic>V</italic> edges connecting to it. Then the node memory of a specific node is the sum of <italic>d</italic> different neighbor vertices of that node. Consider node <italic>A</italic>, with node memory <inline-formula><mml:math id="M76"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:math></inline-formula>, where <italic>v</italic><sub><italic>i</italic></sub> are all the nodes containing an edge to <italic>A</italic>. To check whether the node <italic>B</italic> has an edge with <italic>A</italic>, we calculate the similarity given by</p>
<disp-formula id="E10"><mml:math id="M77"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mi>R</mml:mi><mml:mo>=</mml:mo><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:munder><mml:mrow><mml:mstyle displaystyle="true"><mml:munder accentunder="false"><mml:mrow><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo>&#x0FE38;</mml:mo></mml:munder></mml:mstyle></mml:mrow><mml:mrow><mml:mi>S</mml:mi><mml:mi>i</mml:mi><mml:mi>g</mml:mi><mml:mi>n</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi></mml:mrow></mml:munder></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:mstyle displaystyle="true"><mml:munder><mml:mrow><mml:mstyle displaystyle="true"><mml:munder accentunder="false"><mml:mrow><mml:mstyle displaystyle="true"><mml:munder><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x02260;</mml:mo><mml:mi>B</mml:mi></mml:mrow></mml:munder></mml:mstyle><mml:mi>&#x003B4;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo>&#x0FE38;</mml:mo></mml:munder></mml:mstyle></mml:mrow><mml:mrow><mml:mi>N</mml:mi><mml:mi>o</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>e</mml:mi></mml:mrow></mml:munder></mml:mstyle></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>The signal term is of magnitude 1, because every node vector is bipolar. Next, as we have demonstrated in Section 4.1, the noise term follows a gaussian distribution <inline-formula><mml:math id="M78"><mml:mi>N</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:msqrt><mml:mrow><mml:mfrac><mml:mrow><mml:mi>d</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>D</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:msqrt></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>. Thus, we can define the signal to noise ratio to be</p>
<disp-formula id="E11"><mml:math id="M79"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mtext class="textrm" mathvariant="normal">SNR</mml:mtext><mml:mo>=</mml:mo><mml:mn>10</mml:mn><mml:mo class="qopname">log</mml:mo><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:msqrt><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>d</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>/</mml:mo><mml:mi>D</mml:mi></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow><mml:mo>&#x02248;</mml:mo><mml:mn>5</mml:mn><mml:mo class="qopname">log</mml:mo><mml:mfrac><mml:mrow><mml:mi>D</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:mfrac></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>As we can see, the increase of <italic>D</italic> decreases the noise, and we can decrease the noise by decreasing the average number of edges per vertices. Note that we assume the dimension <italic>D</italic> and the number of edges <italic>E</italic> are large to validate our approximation.</p>
</sec>
<sec>
<title>4.3. Graph Reconstruction</title>
<p>Here, we will discuss methods to reconstruct the whole graph given its memory hypervector <inline-formula><mml:math id="M80"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula>. There are two main paths one can take for this: (1) follow the methods in Section 4.2 and first reconstruct the local node memory, and (2) use the methods of Section 4.1 to retrieve all the edges that are connected to the node via the node memory. We observe that the first technique can come with a large error rate. This is because the reconstruction of the node memory is not a binary classification process. Since we rely on convergence, the converged value of the node memory might have various errors that can make the node memory reconstruction vulnerable to error.</p>
<p>In this paper, we present an iterative process to reconstruct the graph directly from the graph memory. We first define a function <italic>f</italic>(<italic>A, B</italic>) that checks the existence of an edge between nodes <italic>A</italic> and <italic>B</italic>. <italic>f</italic>(<italic>A, B</italic>) &#x0003D; 0 shows that there is no edge from node <italic>A</italic> to <italic>B</italic>, while <italic>f</italic>(<italic>A, B</italic>) &#x0003D; 1 indicates an edge. <xref ref-type="fig" rid="F6">Figure 6</xref> shows <sans-serif>GrapHD</sans-serif> functionality for graph memory reconstruction. In the first step, we generate a hypervector for all possible edges in the graph and initiate <italic>f</italic><sup>(1)</sup> &#x0003D; 0 for all edges. Then, we consider the existence of each edge (e.g., <inline-formula><mml:math id="M81"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>) in the graph memory, <inline-formula><mml:math id="M82"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula> (<inline-graphic xlink:href="fnins-16-757125-i0001.tif"/>). As we explained in Section 4.1, this existence can be computed by checking the similarity of the edge hypervector with graph memory (<inline-graphic xlink:href="fnins-16-757125-i0002.tif"/>). If the returned similarity value is larger than the threshold, we set <italic>f</italic><sup>(1)</sup> &#x0003D; 1. This is the inference process as described in 4.1. We repeat this process for all the nodes of the graph, and we construct the first estimation of the graph, <inline-formula><mml:math id="M83"><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup></mml:math></inline-formula>.</p>
<fig id="F6" position="float">
<label>Figure 6</label>
<caption><p>Graph memory reconstruction: <bold>(A)</bold> create all possible edge hypervectors, <bold>(B)</bold> checking the existence of each edge on the graph, <bold>(C)</bold> iterative noise cancellation.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0006.tif"/>
</fig>
<p>Our goal is to enhance our estimation through an iterative noise cancellation method. Suppose there is an edge between <italic>A</italic> and <italic>B</italic> in <italic>f</italic><sup>(1)</sup>(<italic>A, B</italic>), thus the noise vector is given by <inline-formula><mml:math id="M84"><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">N</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. if there is no edge, the noise vector is simply <inline-formula><mml:math id="M85"><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">N</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup></mml:math></inline-formula>. In short, we can write this as (<inline-graphic xlink:href="fnins-16-757125-i0003.tif"/>):</p>
<disp-formula id="E12"><mml:math id="M86"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">N</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup><mml:mo>-</mml:mo><mml:msup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>A</mml:mi><mml:mo>,</mml:mo><mml:mi>B</mml:mi></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:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</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>We construct the second estimation of the graph by initializing the function <italic>f</italic><sup>(2)</sup>(<italic>A, B</italic>) &#x0003D; 0, and then checking whether the edge between <italic>A</italic> and <italic>B</italic> exists in the noise-corrected memory <inline-formula><mml:math id="M87"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">N</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msubsup></mml:math></inline-formula>. If the result is positive, then we modify <italic>f</italic><sup>(2)</sup>(<italic>A, B</italic>) &#x0003D; 1 and repeat the process for all pairs of nodes. This process is repeated iteratively as follows. Suppose we&#x00027;re given the <italic>k</italic><sup><italic>th</italic></sup> estimate of the graph <italic>f</italic><sup>(<italic>k</italic>)</sup>. We initialize the graph representation <italic>f</italic><sup>(<italic>k</italic>&#x0002B;1)</sup> to 0. Then we use this to generate the graph memory <inline-formula><mml:math id="M88"><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup></mml:math></inline-formula> which corresponds to the graph <italic>f</italic><sup>(<italic>k</italic>)</sup>(<italic>A, B</italic>). We calculate the noise for <italic>A</italic> and <italic>B</italic> as follows:</p>
<disp-formula id="E13"><mml:math id="M89"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">N</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup><mml:mo>-</mml:mo><mml:msup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>A</mml:mi><mml:mo>,</mml:mo><mml:mi>B</mml:mi></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:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002A;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>B</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>We then check whether the edge from <italic>A</italic> to <italic>B</italic> exists inside the vector <inline-formula><mml:math id="M90"><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup><mml:mo>-</mml:mo><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">N</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi><mml:mi>B</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msubsup></mml:math></inline-formula>. If the answer is yes, we set <italic>f</italic><sup>(<italic>k</italic>&#x0002B;1)</sup>(<italic>A, B</italic>) &#x0003D; 1 otherwise we set <italic>f</italic><sup>(<italic>k</italic>&#x0002B;1)</sup>(<italic>A, B</italic>) &#x0003D; 0. We repeat the process until the convergence of the function <italic>f</italic>.</p>
<p><xref ref-type="fig" rid="F7">Figure 7</xref> shows a visual example of graph memory reconstruction during iterative noise cancellation. The results are shown for a graph with 30 nodes and 150 edges. The blue lines show the correct edges on the graph, while the red lines are edges in the actual graph but are not predicted by our graph reconstruction. Note that our method does not predict extra edges that are not a part of the graph. Our result shows that the initial graph reconstruction is approximate and cannot predict several existing edges. However, going further through iterative noise cancellation, we can get a higher accuracy by predicting more edges correctly. With 15 iterations, our technique can recover the entire graph accurately. Section 6.3 explores the impact of different parameters on <sans-serif>GrapHD</sans-serif> graph reconstruction.</p>
<fig id="F7" position="float">
<label>Figure 7</label>
<caption><p>Visual graph reconstruction: red are mismatched edges and blue are existing edges. &#x00023; Edges = 150, &#x00023; Nodes = 30, and <italic>D</italic> &#x0003D; 3, 500.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0007.tif"/>
</fig>
</sec>
<sec>
<title>4.4. Graph Matching</title>
<p>In this section, we formulate an algorithm to match two graphs directly using the HD framework. The aim here is to estimate the number of edges that occur in both graphs between the corresponding edges. One specific assumption we make about our model is that each node serves a specific function or specific memory. For example, in a cognitive model, we might have nodes that could represent items like cat, dog, animal, and pencil. The cat, dog, and animals would have edges among each other that represent the amount of correlation between them, while the pencil vertex would not be attached to any of them due to a lack of correlation with the other three items. This assumption is required to define the problem of graph matching appropriately. In cases where the node ordering does not matter, then matching two graphs has an additional component of finding a mapping between the vertices of two graphs which maximizes a similarity metric. However, by assuming the mapping of vertices to be fixed, our problem simplifies to finding how much the edges match.</p>
<p>Suppose we are given the graph memory <inline-formula><mml:math id="M91"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover><mml:mo>,</mml:mo><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>&#x02032;</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> of two directed unweighted graphs <italic>G</italic> and <italic>G</italic>&#x02032;. Then, using the method of Section 4.2, we can find the node memory <inline-formula><mml:math id="M92"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x02032;</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> of node <italic>a</italic> of both the graphs <italic>G</italic>, <italic>G</italic>&#x02032;, respectively. Our aim is to now compare these two graphs. To proceed, we find the difference of the node memory <inline-formula><mml:math id="M93"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">D</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">M</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x02032;</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> of node <italic>a</italic>. Now, we note that all the nodes that are connected to node <italic>a</italic> in both the graphs cancel out. Only the nodes that are connected to node <italic>a</italic> in exactly one of the graphs are present in the difference vector <inline-formula><mml:math id="M94"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">D</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula>. We can write</p>
<disp-formula id="E14"><mml:math id="M95"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">D</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:munderover accentunder="false" accent="false"><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover></mml:mstyle><mml:msup><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msup><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></disp-formula>
<p>where <italic>n</italic><sub><italic>i</italic></sub> &#x0003D; 0 if <inline-formula><mml:math id="M96"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> is connected to node <italic>a</italic> in <italic>G</italic> but not in <italic>G</italic>&#x02032;, <italic>n</italic><sub><italic>i</italic></sub> &#x0003D; 1 if <inline-formula><mml:math id="M97"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> is connected to the node in <italic>G</italic>&#x02032; but not in <italic>G</italic>. Here, <italic>N</italic> is the number of differences in the neighborhood of the node in both the graphs. That is, the number of nodes connected to the current node in exactly one of the graphs. Now, we use a statistical method to estimate the value of <italic>N</italic>. Each component of <inline-formula><mml:math id="M98"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">D</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula> is a sum of <italic>N</italic> random variables which take up values 1 or &#x02212;1. Thus, each component of <inline-formula><mml:math id="M99"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">D</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula> goes as 2<italic>B</italic> &#x02212; <italic>N</italic>, where <italic>B</italic> is a binomial distribution with <italic>p</italic> &#x0003D; 0.5 and <italic>N</italic> terms. The standard deviation of a binomial distribution is given by <inline-formula><mml:math id="M100"><mml:msub><mml:mrow><mml:mi>&#x003C3;</mml:mi></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msqrt><mml:mrow><mml:mi>N</mml:mi><mml:mi>p</mml:mi><mml:mi>q</mml:mi></mml:mrow></mml:msqrt><mml:mo>=</mml:mo><mml:msqrt><mml:mrow><mml:mi>N</mml:mi><mml:mo>&#x000D7;</mml:mo><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>5</mml:mn><mml:mo>&#x000D7;</mml:mo><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>5</mml:mn></mml:mrow></mml:msqrt><mml:mo>=</mml:mo><mml:msqrt><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:msqrt><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:math></inline-formula>. We can then use the method of moments to estimate <italic>N</italic>. Suppose <italic>Y</italic> &#x0003D; 2<italic>B</italic> &#x02212; <italic>N</italic>. Then, we have &#x02329;<italic>Y</italic>&#x0232A; &#x0003D; 2&#x02329;<italic>B</italic>&#x0232A; &#x02212; <italic>N</italic> &#x0003D; <italic>N</italic> &#x02212; <italic>N</italic> &#x0003D; 0. As a result, <inline-formula><mml:math id="M101"><mml:mrow><mml:mo>&#x02329;</mml:mo><mml:msup><mml:mrow><mml:mi>Y</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mo>&#x0232A;</mml:mo></mml:mrow><mml:mrow><mml:mo>&#x02329;</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi>&#x003C3;</mml:mi><mml:mrow><mml:mi>Y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is the standard deviation of <italic>Y</italic>. From the properties of standard deviation, <inline-formula><mml:math id="M102"><mml:msub><mml:mrow><mml:mi>&#x003C3;</mml:mi></mml:mrow><mml:mrow><mml:mi>Y</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:msub><mml:mrow><mml:mi>&#x003C3;</mml:mi></mml:mrow><mml:mrow><mml:mi>B</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msqrt><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:msqrt></mml:math></inline-formula>. Thus, we can estimate <italic>N</italic> as &#x02329;<italic>Y</italic><sup>2</sup>&#x0232A;. In Section 6.5, we show the capability of our proposed technique to enable efficient and parallel brain-like graph matching.</p>
</sec>
</sec>
<sec id="s5">
<title>5. Neuromorphic Hardware Acceleration</title>
<p><sans-serif>GrapHD</sans-serif> operations are highly parallel; thus, they can be accelerated on existing platforms. However, operating over long binary vectors could still be costly or non-optimized for CPU and GPU platforms. CPUs do not have enough resources for parallelism, and GPUs are more suitable for high-precision computations such as floating-point values (Halawani et al., <xref ref-type="bibr" rid="B22">2021</xref>; Imani et al., <xref ref-type="bibr" rid="B34">2021</xref>; Poduval et al., <xref ref-type="bibr" rid="B63">2021b</xref>). To accelerate <sans-serif>GrapHD</sans-serif>, we develop a novel platform that naturally operates over long binary vectors. The capability of Non-Volatile Memories (NVMs) to act as both storage and a processing unit has encouraged us to use Processing In-Memory (PIM) platform for <sans-serif>GrapHD</sans-serif> acceleration. Since 2016, there have been several hardware accelerators for hyperdimensional computing based on processing in-memory technology. For example, work in Li et al. (<xref ref-type="bibr" rid="B50">2016</xref>), Imani et al. (<xref ref-type="bibr" rid="B32">2017b</xref>), and Imani et al. (<xref ref-type="bibr" rid="B31">2020</xref>) developed a novel PIM architecture accelerating associative search using content addressable memory. Work in Imani et al. (<xref ref-type="bibr" rid="B33">2019d</xref>) designed scalable PIM architecture to support encoding and scalable associative search. However, unlike existing hyperdimensional learning models, <sans-serif>GrapHD</sans-serif> is not based on association search. <sans-serif>GrapHD</sans-serif> performs computation using highly parallel (low-precision) arithmetic operation. This makes all existing hyperdimensional accelerators unable to accelerate <sans-serif>GrapHD</sans-serif>. <sans-serif>GrapHD</sans-serif> operations are mainly bitwise or low-precision vector-vector operations over long hypervectors. For example, binding is primarily based on XNOR operation between two vectors stored in different memory columns.</p>
<sec>
<title>5.1. NOR-Based In-memory Computing</title>
<p>In this paper, we develop DPIM that exploits the switching characteristic of memristor devices to internally perform the bitwise computation on the selected memory element without reading them out of array or using any sense amplifier. <xref ref-type="fig" rid="F8">Figure 8A</xref> shows the structure of DPIM. DPIM exploits crossbar memory with single-bit NVM device and implements <monospace>NOR</monospace> operation in a row-parallel way among the selected memory columns (Imani et al., <xref ref-type="bibr" rid="B27">2019a</xref>). In crossbar, each memristor device switches between two resistive states, <italic>R</italic><sub><italic>ON</italic></sub> (low resistive state, &#x0201C;1&#x0201D;) and <italic>R</italic><sub><italic>OFF</italic></sub> (high resistive state, &#x0201C;0&#x0201D;), whenever the voltage across the device exceeds a threshold (Biolek et al., <xref ref-type="bibr" rid="B4">2021</xref>). This property can be exploited to implement <monospace>NOR</monospace> gate between the memory elements (Kvatinsky et al., <xref ref-type="bibr" rid="B47">2014</xref>). <xref ref-type="fig" rid="F8">Figure 8A</xref> also shows the <monospace>NOR</monospace> functionality on a single row of a crossbar memory. To execute <monospace>NOR</monospace> in a row, an execution voltage, <italic>V</italic><sub>0</sub>, is applied at the <italic>p</italic> terminals of the inputs devices while the <italic>p</italic> terminal of the output memristor is grounded. If one or more input memristors are in a low resistance state (storing &#x0201C;1&#x0201D; value), the voltage across the output device will be <italic>V</italic><sub>0</sub>, resulting in switching the output device to the high resistance stage (&#x0201C;0&#x0201D; value). However, if all input devices are in the high resistance stage, the voltage across the output device cannot switch the output device; thus, the output device keeps &#x0201C;1&#x0201D; value.</p>
<fig id="F8" position="float">
<label>Figure 8</label>
<caption><p><bold>(A)</bold> NOR-based in-memory computing using switching characteristic of NVM devices. <bold>(B)</bold> row-parallel arithmetic operations, including addition and multiplication, and <bold>(C)</bold> row-parallel dot product operation.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0008.tif"/>
</fig>
<p>Since <monospace>NOR</monospace> is a universal logic gate, it can be used to implement other logic operations like addition and multiplication (Haj-Ali et al., <xref ref-type="bibr" rid="B21">2018</xref>; Imani et al., <xref ref-type="bibr" rid="B27">2019a</xref>). DPIM arithmetic operations are, in general, slower than the corresponding CMOS-based implementations. This is because memristor devices are slow in switching. However, this PIM architecture can provide significant speedup with massive parallelism. PIM can support addition and multiplications in parallel, irrespective of the number of rows. For example, to add values stored in different columns of memory, PIM takes the same amount of time to process the addition in a single row or all memory rows. Depending on the size of the operation, the computation takes a different time to execute. Let us assume the computation of <italic>k</italic> vertical vectors of <italic>N</italic>-bits with a length of <italic>l</italic>. When <italic>k</italic> &#x02264; <italic>R</italic>/<italic>N</italic> &#x02212; <italic>M</italic><sub><italic>op</italic></sub>, the execution time of addition and multiplication can be modeled as:</p>
<disp-formula id="E15"><mml:math id="M103"><mml:msub><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>o</mml:mi><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:munder><mml:mrow><mml:mstyle displaystyle="true"><mml:munder accentunder="false"><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x000D7;</mml:mo><mml:mrow><mml:mo>&#x02308;</mml:mo><mml:mrow><mml:mi>l</mml:mi><mml:mo>/</mml:mo><mml:mi>R</mml:mi></mml:mrow><mml:mo>&#x02309;</mml:mo></mml:mrow></mml:mrow><mml:mo>&#x0FE38;</mml:mo></mml:munder></mml:mstyle></mml:mrow><mml:mrow><mml:mi>C</mml:mi><mml:mi>r</mml:mi><mml:mi>o</mml:mi><mml:mi>s</mml:mi><mml:mi>s</mml:mi><mml:mi>b</mml:mi><mml:mi>a</mml:mi><mml:mi>r</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>R</mml:mi><mml:mi>e</mml:mi><mml:mi>u</mml:mi><mml:mi>s</mml:mi><mml:mi>e</mml:mi></mml:mrow></mml:munder></mml:mstyle><mml:mo>&#x000D7;</mml:mo><mml:msub><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>o</mml:mi><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:mi>w</mml:mi><mml:mo>&#x000D7;</mml:mo><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi><mml:mi>r</mml:mi><mml:mi>i</mml:mi><mml:mi>t</mml:mi><mml:mi>e</mml:mi></mml:mrow><mml:mrow><mml:mi>D</mml:mi></mml:mrow></mml:msubsup></mml:math></disp-formula>
<p>where <italic>T</italic><sub><italic>op</italic></sub> is the time of either fixed-point or floating-point arithmetic operations, <italic>R</italic> is the number of array rows, and 0 &#x02264; <italic>w</italic> &#x02264; <italic>N</italic> &#x000D7; <italic>k</italic> is the number of write operations.</p>
</sec>
<sec>
<title>5.2. DPIM Operations</title>
<p>In DPIM, at each time step, the main computation is a bitwise <monospace>NOR</monospace> operation between two columns of memory, storing two vectors. DPIM supports row-parallel computation, meaning that regardless of the number of rows, it takes the same amount of time to perform addition/multiplication. <xref ref-type="fig" rid="F8">Figure 8B</xref> shows the functionality of DPIM performing row-parallel arithmetic operations. For any selected columns, DPIM computes a series of the <monospace>NOR</monospace>-based operations to implement bundling and binding. To perform computation among more than two vectors, the arithmetic operations are performing serially. For an example shown in <xref ref-type="fig" rid="F8">Figure 8B</xref>, to perform arithmetic over three vectors, DPIM computes arithmetic between (<italic>A</italic> &#x000B1; <italic>B</italic>), then the result is aggregated with the third vector (<italic>A</italic> &#x000B1; <italic>B</italic> &#x000B1; <italic>C</italic>).</p>
<p>DPIM only supports column-wise computation; thus, it cannot perform vector-matrix multiplication entirely in a single memory block. To address this, work in Imani et al. (<xref ref-type="bibr" rid="B27">2019a</xref>) proposed the idea of transposed vector-matrix multiplication that enables both multiplication and accumulation to happen using column-wise operations. This approach stores multiple copies of a transposed input vector (horizontal vector) in different memory rows. However, this method is slow and requires a large amount of reserved memory; thus, eliminating high-precision computation in a DPIM block.</p>
<p>To enable DPIM to perform accumulation in a row-parallel way, we propose a novel technique that enables multiplication and accumulation to be performed in two different blocks (<xref ref-type="fig" rid="F8">Figure 8C</xref>). DPIM performs column-wise multiplication between the input vector and the matrix stored in memory. This multiplication is performed on the original data without transposing the input vector or matrix. To enable column-wise accumulation, our method writes the transposed multiplication results on the second block. To minimize the cost of data movement, we exploit the sense amplifier to perform row-parallel/bit-serial read operation of multiplication results and write them in the pipeline on the next memory block (accumulation block). This enables fast and efficient data transfer. Finally, we compute the vector-matrix multiplication by column-wise addition of the vectors in (<italic>A</italic> &#x000D7; <italic>B</italic>)<sup><italic>T</italic></sup> matrix. In Section 6.8, we evaluate DPIM capability in accelerating different <sans-serif>GrapHD</sans-serif> applications.</p>
</sec>
</sec>
<sec id="s6">
<title>6. Applications Evaluation</title>
<sec>
<title>6.1. Experimental Setup</title>
<p><sans-serif>GrapHD</sans-serif> has been implemented in both software and hardware co-module. In software, we verified <sans-serif>GrapHD</sans-serif> functionality by implementing it using Python on CPU. To ease the deployment on parallel platforms, we integrate <sans-serif>GrapHD</sans-serif> with PyTorch library. We optimized the PyTorch library to more effectively work with hypervectors as a common <sans-serif>GrapHD</sans-serif> data structure. We evaluated the framework on NVIDIA Jetson TX2, which has a CUDA-enabled GPGPU running with low-power profiles. We measure the latency of the learning procedure and the power consumption using the NVIDIA tegrastats utility.</p>
<p>We evaluate <sans-serif>GrapHD</sans-serif> functionality on multiple cognitive and learning tasks: (1) Graph memory and node memory reconstruction, (2) graph matching that checks the similarity of graph memories, (3) shortest path between nodes to reason about the relation and closeness of two memorized objects in the graph memory. (4) context-aware learning in object detection, where <sans-serif>GrapHD</sans-serif> is used as external memory to keep the relation between the objects occurring in different video frames.</p>
<p>For circuit-level simulation, we use HSPICE to measure the energy consumption and performance of DPIM in 28nm technology. The robustness of all proposed circuits, i.e., interconnect, has been verified by considering 10% process variations on the size and threshold voltage of transistors using 5,000 Monte Carlo simulations. DPIM works with any bipolar resistive technology, which is the most commonly used in existing NVMs. Here, we adopt a memristor device with a VTEAM model (Kvatinsky et al., <xref ref-type="bibr" rid="B48">2015</xref>; Biolek et al., <xref ref-type="bibr" rid="B4">2021</xref>). The memristor&#x00027;s model parameters are chosen to produce a switching delay of 1.1ns, a voltage pulse of 1V and 2V for RESET and SET operations to fit practical devices (Kvatinsky et al., <xref ref-type="bibr" rid="B47">2014</xref>).</p>
</sec>
<sec>
<title>6.2. Graph Memory Refinement</title>
<p><xref ref-type="fig" rid="F9">Figure 9</xref> shows the similarity distribution of existing and non-existing patterns into graph hypervectors. The results are obtained for the initial (left) and the adjusted graph memory. As explained in Section 3.4, for perfect prediction and information retrieval, we would like to have no overlap between noise and signal distribution such that a threshold value can separate distributions. <sans-serif>GrapHD</sans-serif> memory refinement aims to iteratively increase the hypervector capacity and reduce the overlap between the signal and noise distribution. This would enable us to store large graphs in smaller dimensions. Graph refinement increases the similarity (decision score) of the existing patterns by recursively checking if the graph memory correctly memorizes them. For each misprediction (decision score lower than threshold <italic>T</italic> for existing patterns), we adjust the graph hypervector. As <xref ref-type="fig" rid="F9">Figure 9</xref> shows, the iterative graph refinement reduces the overlap between the noise and signal distribution until having zero overlaps in 20 iterations. This technique increases the capacity of a hypervector with fixed dimensionality to store a larger graph. In other words, this technique makes the ROC curve (<xref ref-type="fig" rid="F4">Figure 4B</xref>) sharper, resulting in 100% true positive with 0% false-positive rates.</p>
<fig id="F9" position="float">
<label>Figure 9</label>
<caption><p>Distribution of existing and non-existing nodes in graph memory without and with an iterative graph memory refinement, shown for 100, 000 edges.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0009.tif"/>
</fig>
</sec>
<sec>
<title>6.3. Graph Reconstruction</title>
<p><xref ref-type="fig" rid="F10">Figure 10A</xref> shows the impact of hypervector dimensionality and the number of edges on the quality of information retrieval. Our results indicate a larger graph requires higher hypervector dimensionality to ensure full graph memorization. For example, a graph with 100 and 200 edges can be accurately stored in a graph hypervector with <italic>D</italic> &#x0003D; 4<italic>k</italic> and <italic>D</italic> &#x0003D; 6<italic>k</italic> dimensionality, respectively. <xref ref-type="fig" rid="F10">Figure 10B</xref> shows the number of required iterations for data recovery. Our technique requires fewer iterations of noise cancellation when the dimensionality of a hypervector is larger than the number of edges that it can accurately store. On the other hand, when the dimensionality is much lower than the required value, our algorithm may still require a few iterations, but it would converge to a random solution. In summary, maximum iterations are required when the dimensionality is the lowest possible value that provides enough capacity to accurately recover the stored information.</p>
<fig id="F10" position="float">
<label>Figure 10</label>
<caption><p>Graph reconstruction: <bold>(A)</bold> reconstruction accuracy, <bold>(B)</bold> required iterations vs. graph size and dimensions, <bold>(C)</bold> error rate v. iterations, and <bold>(D)</bold> robustness to noise (Shown over 1,000 trials).</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0010.tif"/>
</fig>
<p><xref ref-type="fig" rid="F10">Figure 10C</xref> also shows the number of mismatched edges during different noise cancellation iterations. Initially, our graph reconstruction comes with a large number of mismatched edges. This mismatch is larger for larger graph sizes. The error rate starts decreasing during our recursive error correction mechanism. When the size of the graph is within a capacity of a hypervector (<italic>V</italic> &#x02264; 150 for <italic>D</italic> &#x0003D; 4<italic>k</italic>, as shown in <xref ref-type="fig" rid="F10">Figure 10A</xref>), our reconstruction will accurately recover the model. However, when the hypervector stores more patterns, our data recovery often diverges to a random graph (red line shown in <xref ref-type="fig" rid="F10">Figure 10C</xref>). By increasing the number of vertices (and fixing the number of edges to 100), we find that the capacity is unchanged by the number of vertices for high dimensions. This could be because when we have a large enough number of vertices, then most of them will not be connected to any other vertices (due to a fixed number of edges). As a result, they will have 0 node memory and will contribute nothing to the graph memory, thus preserving capacity. The primary bottleneck is in generating orthogonal hypervectors that represent the nodes, so that in the decoding steps we do not make any false decisions. This is why at low dimensions we get a higher error, because the generated hypervectors for the nodes are not completely orthogonal to each other.</p>
<p>One of the main advantages of hyperdimensional representation is its high robustness to noise and failure. In <sans-serif>GrapHD</sans-serif>, hypervectors are random and holographic with i.i.d. components. Each hypervector stores the information across all its components so that no component is more responsible for storing any piece of information than another. This makes a hypervector robust against errors in its components. <xref ref-type="fig" rid="F10">Figure 10D</xref> shows the impact of noise in dimensions on graph memory reconstruction. The results are reported when different percentages of hypervector dimensions are randomly dropped. Our representation provides inherent robustness to such noise, as the data can still be reconstructed when the dimensionality is large enough. For example, our method tolerates 10% random noise using <italic>D</italic> &#x0003D; 6<italic>k</italic> dimensions to represent a graph with 30 nodes and 150 edges.</p>
</sec>
<sec>
<title>6.4. Node Memory Reconstruction</title>
<p><xref ref-type="fig" rid="F11">Figure 11A</xref> shows the impact of graph size and hypervector dimension on node memory reconstruction error. Similar to graph reconstruction, the node reconstruction error depends on the graph size and dimensionality. A larger graph with more edges requires a higher dimensionality to ensure accurate node memory reconstruction. For example, for graphs with 100 and 200 nodes, our technique requires <italic>D</italic> &#x0003D; 2<italic>k</italic> and <italic>D</italic> &#x0003D; 4<italic>k</italic> to ensure 100% accurate node reconstruction. Note that using a hypervector with lower dimensionality to store a large graph could result in a quality loss during the information extraction. For example, using <italic>D</italic> &#x0003D; 2<italic>k</italic> to store a graph with 200 nodes reduces the chance of node memory reconstruction. Note that HDC is an approximate computational model. Therefore, it cannot theoretically ensure 100% data reconstruction. However, as our results show, in practice it is highly possible to get completely accurate reconstruction rate when your node memory is not loaded with more than its theoretical capacity.</p>
<fig id="F11" position="float">
<label>Figure 11</label>
<caption><p>Node memory reconstruction: <bold>(A)</bold> error rate, <bold>(B)</bold> required iterations vs. graph size and dimensions, <bold>(C)</bold> error rate vs. iterations, and <bold>(D)</bold> robustness to noise.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0011.tif"/>
</fig>
<p><xref ref-type="fig" rid="F11">Figure 11B</xref> also shows how the number of required iterations changes depending on the graph size and hypervector dimensionality. As expected, node reconstruction is faster when hypervector dimensionality is larger (in fixed graph size). The lower number of iterations comes from a low error rate and interference noises. <xref ref-type="fig" rid="F11">Figure 11C</xref> shows the node memory reconstruction error for a hypervector with <italic>D</italic> &#x0003D; 4<italic>k</italic> dimensions that stores different graph sizes. The larger graph, the more iterations we need to cancel the noise. In addition, the noise is less likely to cancel out to decrease the error rate (as also shown in <xref ref-type="fig" rid="F11">Figure 11A</xref> heatmap).</p>
<p>Similar to graph reconstruction, node reconstruction is inherently robust to noise and failure on random hypervector elements. Our evaluation in <xref ref-type="fig" rid="F11">Figure 11D</xref> shows higher robustness in hypervectors with higher dimensionality. For example, hypervectors with <italic>D</italic> &#x0003D; 6<italic>k</italic> can tolerate a 5% error rate with no error. Even dropping more dimensions still has a small impact on the reconstruction error.</p>
</sec>
<sec>
<title>6.5. Graph Matching</title>
<p><xref ref-type="fig" rid="F12">Figure 12</xref> evaluates the quality of <sans-serif>GrapHD</sans-serif> for graph matching using hypervectors with different dimensions. For all evaluations, the graph size is assumed to be fixed (30 nodes and 150 edges). The x-axis in the graph shows the actual edge difference between the two graphs, while the y-axis shows our estimated node difference. Ideally, we expect to see a graph with a straight line (<italic>y</italic> &#x0003D; <italic>x</italic>), indicating that our estimation accurately matches the actual edge difference. However, graph matching comes with an error when the hypervector dimensionality is low. As our evaluation indicates, the estimated edge difference gets a higher error (becomes far from the diagonal line) when the dimensionality gets lower.</p>
<fig id="F12" position="float">
<label>Figure 12</label>
<caption><p><bold>(A)</bold> Graph matching vs. dimensions: actual vs. estimated edge difference (For a single model) and <bold>(B)</bold> <sans-serif>GrapHD</sans-serif> success rate performing shortest path on an encoded graph (shown over 1,000 trials).</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0012.tif"/>
</fig>
</sec>
<sec>
<title>6.6. Shortest Path Between Nodes</title>
<p>In a graphical model of memory, identifying the context of information and making inferences often require identifying correlated nodes separated by certain distances in graphs. These are nodes that are not directly related; rather, they are related by a series of nodes that connect only to the next node. This is similar to how a reasoning process occurs; we start off with an observation connected to another memory. This memory would, in turn, lead to a connection with another memory through reasoning. This is equivalent to finding the path between two nodes and studying its connections in the graph.</p>
<p>We can use <sans-serif>GrapHD</sans-serif> algorithms to find a path between two nodes and find the shortest distance between them. Suppose we want to find the shortest path between two nodes <italic>A</italic> and <italic>B</italic> in a graph <inline-formula><mml:math id="M104"><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">G</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:math></inline-formula>. First, we reconstruct all the local node memory for all nodes in the graph. Next, we maintain a distance value associated with all nodes, and this value is initialized to 0. This value will later be substituted with the step at which the node is encountered in the graph algorithm, which is also the distance of the node from <italic>A</italic>.</p>
<p>Here we explain our algorithm. In the first step, we consider the node <italic>A</italic> with node memory <inline-formula><mml:math id="M105"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">H</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. Next, using the thresholding method from section 4.1, we find all the nodes that have an edge with <italic>A</italic>. These nodes are distance 1 away from <italic>A</italic>, and we assign a distance value of 1 to these nodes. Next, we consider the node memory of all the distance <italic>d</italic> &#x0003D; 1 nodes and add them together. Then we repeat the same process to find all nodes not encountered before that share an edge with the distance of <italic>d</italic> &#x0003D; 1 nodes. These nodes are a distance of <italic>d</italic> &#x0003D; 2 away. Suppose we have the set of all distance <italic>d</italic> &#x0003D; <italic>n</italic> nodes; we add up all their local memories. Then, we find the set of all nodes not encountered before, which share an edge of one of the distance <italic>d</italic> &#x0003D; <italic>n</italic> nodes. These nodes will be labeled with distance <italic>d</italic> &#x0003D; <italic>n</italic> &#x0002B; 1. The process is repeated until either the node <italic>B</italic> is encountered, until all the nodes are encountered, or no new nodes are encountered.</p>
<p>If the node <italic>B</italic> is never encountered when the process terminates, we conclude no path between the nodes <italic>A</italic> and <italic>B</italic>. If <italic>B</italic> is encountered, we begin finding out the exact path joining <italic>A</italic> and <italic>B</italic>. Suppose node <italic>B</italic> is at a distance <italic>d</italic> away from <italic>A</italic>. We consider the node memory of <italic>B</italic> and then find which one of the <italic>d</italic> &#x02212; 1 distance nodes shares an edge with the node <italic>B</italic>. If there are multiple, we choose one of them randomly. Next, we consider the node memory of this <italic>d</italic> &#x02212; 1 distance node. We find which of the <italic>d</italic> &#x02212; 2 distance nodes share an edge with the <italic>d</italic> &#x02212;1 distance node. If there are multiple, then we again chose one of the nodes arbitrarily. We continue this process recursively. After reaching the <italic>d</italic> &#x02212; <italic>k</italic> distance node, we consider its node memory and find a <italic>d</italic> &#x02212; <italic>k</italic> &#x02212; 1 distance node that shares an edge with the distance <italic>d</italic> &#x02212; <italic>k</italic> node. The process is continued until we reach the node <italic>A</italic>. Following the nodes back will allow us to find the shortest path that joins the nodes <italic>A</italic> and <italic>B</italic>.</p>
<p>In the evaluations, we simulate <italic>d</italic> disjoint random graphs, each with <italic>V</italic><sub><italic>av</italic></sub> &#x0003D; 21 vertices and <italic>E</italic><sub><italic>av</italic></sub> &#x0003D; 270 edges. In all these graphs, we chose one random node and labeled it as 1, 2, 3, 4, &#x022EF;&#x02009;, <italic>d</italic>. Next, we form an edge between all nodes. In this way, we construct a random graph that contains pairs of nodes with distances 1 to <italic>d</italic> in a controlled manner. In our evaluations, we chose <italic>d</italic> &#x0003D; 50 and the results are shown in <xref ref-type="fig" rid="F12">Figure 12B</xref>. We see that as we increase the distance between the destination node and the starting node, the accuracy decreases drastically. This is because the number of edges that <sans-serif>GrapHD</sans-serif> searches through in each iteration increases exponentially with each step. As a result, the capacity eventually saturates if the graph is too big and if the distance is too large. On the other hand, increasing the dimension also increases the accuracy. This is expected since larger dimensions would increase the capacity of <sans-serif>GrapHD</sans-serif>, which allows storing a larger number of neighbors efficiently.</p>
<p>The shortest path detection has a natural interpretation in the case of weighted graph. In the weighted graph representation, the weights on edges become proportional to the similarity of the edge with memory. This results in a stochastic path finding algorithm, where the probability an edge is identified as being connected to the current node is proportional to the weight on edge. This has interpretation in the cognitive framework that the edge weight can be thought of as how strongly two nodes are correlated in the memory or how strongly the connection is memorized. The Human brain would form reasoning-based connections between two such objects depending on whether the two items in memory are strongly correlated. We can mimic a probabilistic path finding algorithm by using the current algorithm for the weighted graphs, which can mimic the reasoning process of the human brain. However, if we want to find a path independent of the weights, then we would need to store the graph using the unweighted encoding, and then the same algorithm would work as expected.</p>
</sec>
<sec>
<title>6.7. Object Detection</title>
<p>Based on the mathematical discussion in the paper (Section 4.1), we already showed the advantages that <sans-serif>GrapHD</sans-serif> for information retrieval, which is a key operation involved in traditional knowledge graph and relational learning benchmarks. Instead, in this work, we focus on a more advanced task that exploits knowledge graphs as a memorization model to enhance existing machine learning models. Our task also involves operations and computations that are not in high-dimension. Particularly, we evaluate <sans-serif>GrapHD</sans-serif> capability to help existing object detection algorithms. Deep learning models have already been used for highly accurate object detection (Ren et al., <xref ref-type="bibr" rid="B71">2015</xref>). Particularly, convolutions neural networks (CNNs) showed promising results in extracting information from image and video data. However, CNN has a weak notion of time; thus, their predictions might be non-sense or out of context, e.g., predicting a moon as a light in videos taken from the sky.</p>
<p><sans-serif>GrapHD</sans-serif> is a memorization model that can be used beside any learning algorithm. To eliminate these miss-predictions, CNNs need to keep the context by associating the objects during the training and inference phase. We exploit <sans-serif>GrapHD</sans-serif> to memorize the relation of objects as a memory graph. <sans-serif>GrapHD</sans-serif> assigns strong weights between objects that are more likely to happen together in a video frame. For every prediction, CNN predicts all objects that have been seen in a frame. Next, <sans-serif>GrapHD</sans-serif> encodes the objects into high-dimensional space and checks the graph memory to see a possible correlation of these items (i.e., the distance or existence of edges in a graph memory). This enables CNNs to provide more accurate decisions and also the capability to reason about the prediction based on prior knowledge. To get the maximum benefit from <sans-serif>GrapHD</sans-serif>, the learning and memorization models need to be integrated. In other words, both CNN and <sans-serif>GrapHD</sans-serif> models need to be updated using the same procedure and rules. In our study, the <sans-serif>GrapHD</sans-serif> is placed as a dynamic memory beside the CNN. For each given train data, the data is processed using both CNN and <sans-serif>GrapHD</sans-serif>. At first, CNN operates over the data to make a prediction. Next, <sans-serif>GrapHD</sans-serif> look at the CNN prediction and accordingly gives a new loss term to the CNN in order to get updated. This loss represents how far the CNN prediction was compared to a <sans-serif>GrapHD</sans-serif> memorization prediction.</p>
<p><xref ref-type="fig" rid="F13">Figure 13A</xref> shows the accuracy and efficiency of CNN enhanced with <sans-serif>GrapHD</sans-serif> and recurrent neural networks (RNNs) for object detection task (Karpathy and Fei-Fei, <xref ref-type="bibr" rid="B40">2015</xref>). The results are reported over the Microsoft COCO object detection dataset (Lin et al., <xref ref-type="bibr" rid="B51">2014</xref>). Work in Karpathy and Fei-Fei (<xref ref-type="bibr" rid="B40">2015</xref>); Kousik et al. (<xref ref-type="bibr" rid="B46">2021</xref>) integrated CNN and RNN in series, thus providing memorization capability for CNN in making a prediction. The results are reported for networks running on NVIDIA Jetson TX2, an embedded processor. Our evaluation shows that CNN enhanced with <sans-serif>GrapHD</sans-serif> can provide the same accuracy as the RNN network. However, our method can provide significantly higher computation efficiency. Our solution enables parallel construction of CNN and <sans-serif>GrapHD</sans-serif> model, thus enabling parallel training. Our evaluation shows that <sans-serif>GrapHD</sans-serif> achieves 3.8&#x000D7; faster training and 1.7&#x000D7; faster inference than RNN while ensuring the same classification accuracy. Note that <sans-serif>GrapHD</sans-serif> provides a higher capability for reasoning, as it has direct access to the transparent memorized values.</p>
<fig id="F13" position="float">
<label>Figure 13</label>
<caption><p><bold>(A)</bold> <sans-serif>GrapHD</sans-serif> vs. RNN for object detection: Accuracy and efficiency. <bold>(B)</bold> DPIM speedup and energy efficiency running different <sans-serif>GrapHD</sans-serif> operations over GPU.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0013.tif"/>
</fig>
</sec>
<sec>
<title>6.8. Hardware Acceleration</title>
<p>As we explained in Section 5, <sans-serif>GrapHD</sans-serif> applications can be accelerated on parallel platforms. Here, we study the capability of the proposed DPIM architecture in accelerating <sans-serif>GrapHD</sans-serif> applications. <xref ref-type="fig" rid="F13">Figure 13B</xref> shows the performance and energy efficiency of DPIM running different <sans-serif>GrapHD</sans-serif> applications. The results are reported for a large graph with 1,000 nodes that have been mapped to a hypervector with different dimensions. All results are reported respective to NVIDIA GTX 1080 GPU when GPU runs multiple queries to ensure maximum resource utilization. Our results indicate that DPIM provides higher speedup and energy efficiency as compared to GPU regardless of the dimensionality and <sans-serif>GrapHD</sans-serif> operation. For example, DPIM achieves 10.6&#x000D7; faster and 42.0&#x000D7; higher energy efficiency than GPU with <italic>D</italic> &#x0003D; 1<italic>K</italic> dimensions. DPIM efficiency depends on two factors: <bold>(1) Application:</bold> operations required by <sans-serif>GrapHD</sans-serif> applications. DPIM provides higher benefits for applications that require lower precision arithmetic. This is due to a linear and quadratic increase in DPIM bundling and binding time in respect to bit-precision. For example, <sans-serif>GrapHD</sans-serif> during graph and node reconstruction operates over low precision hypervectors, thus providing higher computation efficiency over GPU. <bold>(2) Dimensionality:</bold> DPIM efficiency increases with the hypervector dimensionality. This efficiency comes from DPIM capability to support fast and row-parallel operations and also address data movement issues by eliminating costly data access to off-chip memory. Our results indicate that DPIM provides significantly higher performance speedup for graphs with higher dimensionality. For example, <sans-serif>GrapHD</sans-serif> using <italic>D</italic> &#x0003D; 16<italic>K</italic> and <italic>D</italic> &#x0003D; 32<italic>K</italic> dimensions provide on average 23.1 &#x000D7; and 30.4 &#x000D7; faster computation compared to GPU. In terms of energy efficiency, DPIM efficiency has a lower relation to dimensionality as both DPIM and GPU will require the same number of operations. The slight improvement in DPIM energy efficiency comes from its capability in data movement reduction.</p>
</sec>
<sec>
<title>6.9. Graph Decoding With Nengo</title>
<p>In this section, we demonstrate <sans-serif>GrapHD</sans-serif> memory decoding using the Nengo SPA module to simulate how our model can work with Neuromorphic hardware and support existing models that try to make more brain-like models of cognition and reasoning. A key example where our model can be applied is SPAUN (Stewart et al., <xref ref-type="bibr" rid="B76">2012</xref>), which is a large-scale cognitive model of the brain. SPAUN consists of about 2.3 million spiking neurons which are used to run various tasks like addition, digit recognition, and question answering without requiring any rewiring of the neurons. SPAUN represents information using Holographic Reduced Representation (HRR) (DuBois and Phillips, <xref ref-type="bibr" rid="B12">2017</xref>), where the hypervectors are unit real vectors, and the binding is done using circular convolution. Our model for storing graph memory can be used to better represent associated information and correlated memory events in graph-based format and also decoded using the algorithms in this paper.</p>
<p>The implementation of <sans-serif>GrapHD</sans-serif> uses the HRR encoding that comes with the Nengo SPA module. The module implements HRR operations like binding, bundling and similarity using a Spiking Neural Network architecture. Our implementation contains an encoding module and decoding module. First, we generate random <italic>D</italic> &#x0003D; 64 dimensional vectors for each of the nodes. The encoding module then constructs the Graph memory of the graph based on the algorithm in Section 3. This is done using the binding and bundling operations implemented in Nengo SPA. The decoding module requires additional steps of first unbinding the memory vector with all possible node vectors, and then checking the similarity of the result with all other nodes. Based on the thresholding process, it is then decided whether an edge between two nodes exist. Calculating the similarity with all the nodes is done automatically by Nengo where it checks the similarity between all the semantic pointers in the vocabulary of the model. The main step is in unbinding the memory vector with all the nodes, which is done by calculating the unbinding of a query vector and memory vector. The query vector is chosen to cycle through all the node vector over a period of 0.5<italic>s</italic>, and then Nengo calculated the similarity of the result with all the node vectors as a function of time.</p>
<p>As <xref ref-type="fig" rid="F14">Figure 14A</xref> shows, we use a graph with six vertices and ten edges and demonstrate at each step how the neuromorphic model of <sans-serif>GrapHD</sans-serif> decodes the graph. We decode the memory at each iteration by sending a query signal for a total of 0.5 s which sequentially changes value from the SPA representing <inline-formula><mml:math id="M106"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>V</mml:mi></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> to <inline-formula><mml:math id="M107"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>V</mml:mi></mml:mrow><mml:mo>&#x02192;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>5</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>. From the output similarity at each of these time frames with the rest of the vertices, we can understand whether a connection between two nodes exists. For example, consider <xref ref-type="fig" rid="F14">Figure 14C</xref>, which is the first iteration of the decoding process. To find whether an edge between node 2 and node 3, we look at the time of 0.21 s, when the query has the vector representing node 2 and then find the similarity of the line representing node 3 (Red). This similarity is about 0.3, which is greater than the threshold value (chosen to be 0.1).</p>
<fig id="F14" position="float">
<label>Figure 14</label>
<caption><p>Results of the graph decoding process on neuromorphic hardware. <bold>(A)</bold> graph structure and the initial reconstructed graph, <bold>(B)</bold> similarity of the query vector with each of the nodes, <bold>(C)</bold> similarity with each of the node vector with graph memory of the model, <bold>(D,E)</bold> output of the graph decoding process in the first <bold>(D)</bold> and second iterations <bold>(E)</bold>.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fnins-16-757125-g0014.tif"/>
</fig>
<p>In <xref ref-type="fig" rid="F14">Figure 14</xref>, we show the results of the Graph decoding process. The figures show the similarity of the semantic pointer with each of the vectors representing all the nodes. In <xref ref-type="fig" rid="F14">Figure 14B</xref>, we show the similarity of the query vector with each of the nodes as a function of time. It keeps cycling between all the nodes once within one cycle of 0.5 s. In <xref ref-type="fig" rid="F14">Figure 14C</xref>, we show the Graph memory of the model and its similarity with each of the node vectors when we feed in the query vector to calculate the similarity. In <xref ref-type="fig" rid="F14">Figures 14D,E</xref>, we show the output of the graph decoding process in the first and second iterations. We find that the output graph in the first iteration has an edge missing, but then it finds this edge and accurately decodes the graph in the second iteration.</p>
<p>Besides SPAUN, as vector symbolic architecture, <sans-serif>GrapHD</sans-serif> has full compatibility with the new Intel neuromorphic framework, i.e., LAVA. This further shows the capability of <sans-serif>GrapHD</sans-serif> to be used as neuromorphic computing framework.</p>
</sec>
</sec>
<sec sec-type="conclusions" id="s7">
<title>7. Conclusion</title>
<p>This paper defines a brain-inspired system, called <sans-serif>GrapHD</sans-serif>, that better represents HDC memorization capability in terms of a graph of relations. We introduce, <sans-serif>GrapHD</sans-serif>, graph-based hyperdimensional memorization that represents information into high-dimensional space and enables reasoning. <sans-serif>GrapHD</sans-serif> defines an encoding method that represents complex graph-based data structure into high-dimensional space. Our encoder spreads the information of all nodes and edges across into a full holistic representation so that no component is more responsible for storing any piece of information than another. Then, <sans-serif>GrapHD</sans-serif> defines several important cognitive functionalities over the encoded memory graph. These operations include memory reconstruction, information retrieval, graph matching, and shortest path.</p>
</sec>
<sec sec-type="data-availability" id="s8">
<title>Data Availability Statement</title>
<p>The original contributions presented in the study are publicly available. This data can be found here through Microsoft COCO dataset: <ext-link ext-link-type="uri" xlink:href="https://cocodataset.org/&#x00023;home">https://cocodataset.org/&#x00023;home</ext-link>.</p>
</sec>
<sec id="s9">
<title>Author Contributions</title>
<p>PP and MI conceived the research. PP, HA, AZ, FI, MHN, TG, and MI conducted the research and analyzed the data. PP, HA, FI, TG, and MI wrote the manuscript. All authors reviewed the manuscript and agreed on the contents of the paper.</p>
</sec>
<sec sec-type="funding-information" id="s10">
<title>Funding</title>
<p>This work was supported in part by National Science Foundation (NSF) &#x00023;2127780 and &#x00023;2019511, Semiconductor Research Corporation (SRC) Task No. 2988.001, Department of the Navy, Office of Naval Research, Grant &#x00023;N00014-21-1-2225 and &#x00023;N00014-22-1-2067, Air Force Office of Scientific Research, the Louisiana Board of Regents Support Fund &#x00023;LEQSF(2020-23)-RD-A-26, and a generous gift from Cisco.</p>
</sec>
<sec sec-type="COI-statement" id="conf1">
<title>Conflict of Interest</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.</p>
</sec>
<sec sec-type="disclaimer" id="s11">
<title>Publisher&#x00027;s Note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
</body>
<back>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bassett</surname> <given-names>D. S.</given-names></name> <name><surname>Sporns</surname> <given-names>O.</given-names></name></person-group> (<year>2017</year>). <article-title>Network neuroscience</article-title>. <source>Nat. Neurosci</source>. <volume>20</volume>, <fpage>353</fpage>&#x02013;<lpage>364</lpage>. <pub-id pub-id-type="doi">10.1038/nn.4502</pub-id><pub-id pub-id-type="pmid">28230844</pub-id></citation></ref>
<ref id="B2">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bekolay</surname> <given-names>T.</given-names></name> <name><surname>Bergstra</surname> <given-names>J.</given-names></name> <name><surname>Hunsberger</surname> <given-names>E.</given-names></name> <name><surname>DeWolf</surname> <given-names>T.</given-names></name> <name><surname>Stewart</surname> <given-names>T. C.</given-names></name> <name><surname>Rasmussen</surname> <given-names>D.</given-names></name> <etal/></person-group>. (<year>2014</year>). <article-title>Nengo: a python tool for building large-scale functional brain models</article-title>. <source>Front. Neuroinform</source>. <volume>7</volume>:<fpage>48</fpage>. <pub-id pub-id-type="doi">10.3389/fninf.2013.00048</pub-id><pub-id pub-id-type="pmid">24431999</pub-id></citation></ref>
<ref id="B3">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Bi</surname> <given-names>Y.</given-names></name> <name><surname>Chadha</surname> <given-names>A.</given-names></name> <name><surname>Abbas</surname> <given-names>A.</given-names></name> <name><surname>Bourtsoulatze</surname> <given-names>E.</given-names></name> <name><surname>Andreopoulos</surname> <given-names>Y.</given-names></name></person-group> (<year>2019</year>). <article-title>Graph-based object classification for neuromorphic vision sensing</article-title>, in <source>Proceedings of the IEEE/CVF International Conference on Computer Vision</source> (<publisher-loc>Seoul</publisher-loc>), <fpage>491</fpage>&#x02013;<lpage>501</lpage>.<pub-id pub-id-type="pmid">32941136</pub-id></citation></ref>
<ref id="B4">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Biolek</surname> <given-names>D.</given-names></name> <name><surname>Kolka</surname> <given-names>Z.</given-names></name> <name><surname>Biolkov&#x000E1;</surname> <given-names>V.</given-names></name> <name><surname>Biolek</surname> <given-names>Z.</given-names></name> <name><surname>Kvatinsky</surname> <given-names>S.</given-names></name></person-group> (<year>2021</year>). <article-title>(v) team for spice simulation of memristive devices with improved numerical performance</article-title>. <source>IEEE Access</source> <volume>9</volume>, <fpage>30242</fpage>&#x02013;<lpage>30255</lpage>. <pub-id pub-id-type="doi">10.1109/ACCESS.2021.3059241</pub-id><pub-id pub-id-type="pmid">27295638</pub-id></citation></ref>
<ref id="B5">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Bonomi</surname> <given-names>F.</given-names></name> <name><surname>Milito</surname> <given-names>R.</given-names></name> <name><surname>Zhu</surname> <given-names>J.</given-names></name> <name><surname>Addepalli</surname> <given-names>S.</given-names></name></person-group> (<year>2012</year>). <article-title>Fog computing and its role in the internet of things</article-title>, in <source>Proceedings of the First Edition of the MCC Workshop on Mobile Cloud Computing</source> (<publisher-loc>New York, NY</publisher-loc>), <fpage>13</fpage>&#x02013;<lpage>16</lpage>.</citation>
</ref>
<ref id="B6">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chai</surname> <given-names>W. J.</given-names></name> <name><surname>Abd Hamid</surname> <given-names>A. I.</given-names></name> <name><surname>Abdullah</surname> <given-names>J. M.</given-names></name></person-group> (<year>2018</year>). <article-title>Working memory from the psychological and neurosciences perspectives: a review</article-title>. <source>Front. Psychol</source>. <volume>9</volume>:<fpage>401</fpage>. <pub-id pub-id-type="doi">10.3389/fpsyg.2018.00401</pub-id><pub-id pub-id-type="pmid">29636715</pub-id></citation></ref>
<ref id="B7">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chen</surname> <given-names>R.</given-names></name> <name><surname>Imani</surname> <given-names>M.</given-names></name> <name><surname>Imani</surname> <given-names>F.</given-names></name></person-group> (<year>2021</year>). <article-title>Joint active search and neuromorphic computing for efficient data exploitation and monitoring in additive manufacturing</article-title>. <source>J. Manuf. Process</source>. <volume>71</volume>, <fpage>743</fpage>&#x02013;<lpage>752</lpage>. <pub-id pub-id-type="doi">10.1016/j.jmapro.2021.09.048</pub-id></citation>
</ref>
<ref id="B8">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chen</surname> <given-names>X.-W.</given-names></name> <name><surname>Lin</surname> <given-names>X.</given-names></name></person-group> (<year>2014</year>). <article-title>Big data deep learning: challenges and perspectives</article-title>. <source>IEEE Access</source> <volume>2</volume>, <fpage>514</fpage>&#x02013;<lpage>525</lpage>. <pub-id pub-id-type="doi">10.1109/ACCESS.2014.2325029</pub-id><pub-id pub-id-type="pmid">27295638</pub-id></citation></ref>
<ref id="B9">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Chian</surname> <given-names>V. C.</given-names></name> <name><surname>Hildebrandt</surname> <given-names>M.</given-names></name> <name><surname>Runkler</surname> <given-names>T.</given-names></name> <name><surname>Dold</surname> <given-names>D.</given-names></name></person-group> (<year>2021</year>). <article-title>Learning through structure: towards deep neuromorphic knowledge graph embeddings</article-title>, in <source>2021 International Conference on Neuromorphic Computing (ICNC)</source> (<publisher-loc>Wuhan</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>61</fpage>&#x02013;<lpage>70</lpage>.</citation>
</ref>
<ref id="B10">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chien</surname> <given-names>H.-Y. S.</given-names></name> <name><surname>Honey</surname> <given-names>C. J.</given-names></name></person-group> (<year>2020</year>). <article-title>Constructing and forgetting temporal context in the human cerebral cortex</article-title>. <source>Neuron</source> <volume>106</volume>, <fpage>675</fpage>&#x02013;<lpage>686</lpage>. <pub-id pub-id-type="doi">10.1016/j.neuron.2020.02.013</pub-id><pub-id pub-id-type="pmid">32164874</pub-id></citation></ref>
<ref id="B11">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Courbariaux</surname> <given-names>M.</given-names></name> <name><surname>Bengio</surname> <given-names>Y.</given-names></name> <name><surname>David</surname> <given-names>J.-P.</given-names></name></person-group> (<year>2014</year>). <article-title>Training deep neural networks with low precision multiplications</article-title>. <source>arXiv [Preprint] arXiv:</source>1412.7024.<pub-id pub-id-type="pmid">34773898</pub-id></citation></ref>
<ref id="B12">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>DuBois</surname> <given-names>G. M.</given-names></name> <name><surname>Phillips</surname> <given-names>J. L.</given-names></name></person-group> (<year>2017</year>). <article-title>Working memory concept encoding using holographic reduced representations</article-title>, in <source>MAICS</source> (<publisher-loc>Fort Wayne, IN</publisher-loc>), <fpage>137</fpage>&#x02013;<lpage>144</lpage>.<pub-id pub-id-type="pmid">28039931</pub-id></citation></ref>
<ref id="B13">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Frady</surname> <given-names>E. P.</given-names></name> <name><surname>Kleyko</surname> <given-names>D.</given-names></name> <name><surname>Sommer</surname> <given-names>F. T.</given-names></name></person-group> (<year>2020</year>). <article-title>Variable binding for sparse distributed representations: theory and applications</article-title>. <source>arXiv [Preprint] arXiv:</source>2009.06734. <pub-id pub-id-type="doi">10.1109/TNNLS.2021.3105949</pub-id><pub-id pub-id-type="pmid">34478381</pub-id></citation></ref>
<ref id="B14">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Frady</surname> <given-names>E. P.</given-names></name> <name><surname>Sommer</surname> <given-names>F. T.</given-names></name></person-group> (<year>2019</year>). <article-title>Robust computation with rhythmic spike patterns</article-title>. <source>Proc. Natl. Acad. Sci. U.S.A</source>. <volume>116</volume>, <fpage>18050</fpage>&#x02013;<lpage>18059</lpage>. <pub-id pub-id-type="doi">10.1073/pnas.1902653116</pub-id><pub-id pub-id-type="pmid">31431524</pub-id></citation></ref>
<ref id="B15">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Gallistel</surname> <given-names>C. R.</given-names></name> <name><surname>King</surname> <given-names>A. P.</given-names></name></person-group> (<year>2011</year>). <source>Memory and the Computational Brain: Why Cognitive Science Will Transform Neuroscience, vol. 6</source>. <publisher-loc>Hoboken, NJ</publisher-loc>: <publisher-name>John Wiley &#x00026; Sons</publisher-name>.</citation>
</ref>
<ref id="B16">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Gayler</surname> <given-names>R. W.</given-names></name></person-group> (<year>1998</year>). <article-title>Multiplicative binding, representation operators &#x00026;analogy (workshop poster)</article-title>. <source>Preprint</source>.</citation>
</ref>
<ref id="B17">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Gayler</surname> <given-names>R. W.</given-names></name> <name><surname>Levy</surname> <given-names>S. D.</given-names></name></person-group> (<year>2009</year>). <article-title>A distributed basis for analogical mapping</article-title>, in <source>New Frontiers in Analogy Research: Proceedings of the Second International Conference on Analogy, Vol. 9</source> (<publisher-loc>Sofia</publisher-loc>).</citation>
</ref>
<ref id="B18">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Ge</surname> <given-names>L.</given-names></name> <name><surname>Parhi</surname> <given-names>K. K.</given-names></name></person-group> (<year>2020</year>). <article-title>Classification using hyperdimensional computing: a review</article-title>. <source>IEEE Circ. Syst. Mag</source>. <volume>20</volume>, <fpage>30</fpage>&#x02013;<lpage>47</lpage>. <pub-id pub-id-type="doi">10.1109/MCAS.2020.2988388</pub-id><pub-id pub-id-type="pmid">27295638</pub-id></citation></ref>
<ref id="B19">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Genssler</surname> <given-names>P. R.</given-names></name> <name><surname>Amrouch</surname> <given-names>H.</given-names></name></person-group> (<year>2021</year>). <article-title>Brain-inspired computing for wafer map defect pattern classification</article-title>, in <source>2021 IEEE International Test Conference (ITC)</source> (<publisher-loc>Anaheim, CA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>123</fpage>&#x02013;<lpage>132</lpage>.</citation>
</ref>
<ref id="B20">
<citation citation-type="thesis"><person-group person-group-type="author"><name><surname>George</surname> <given-names>D.</given-names></name></person-group> (<year>2008</year>). <source>How the brain might work: a hierarchical and temporal model for learning and recognition</source> (Ph.D. thesis). <publisher-name>Stanford University</publisher-name>. Available online at: <ext-link ext-link-type="uri" xlink:href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.163.7566&#x00026;rep=rep1&#x00026;type=pdf">http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.163.7566&#x00026;rep=rep1&#x00026;type=pdf</ext-link></citation>
</ref>
<ref id="B21">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Haj-Ali</surname> <given-names>A.</given-names></name> <name><surname>Ben-Hur</surname> <given-names>R.</given-names></name> <name><surname>Wald</surname> <given-names>N.</given-names></name> <name><surname>Kvatinsky</surname> <given-names>S.</given-names></name></person-group> (<year>2018</year>). <article-title>Efficient algorithms for in-memory fixed point multiplication using magic</article-title>, in <source>2018 IEEE International Symposium on Circuits and Systems (ISCAS)</source> (<publisher-loc>Florence</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x02013;<lpage>5</lpage>.</citation>
</ref>
<ref id="B22">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Halawani</surname> <given-names>Y.</given-names></name> <name><surname>Kilani</surname> <given-names>D.</given-names></name> <name><surname>Hassan</surname> <given-names>E.</given-names></name> <name><surname>Tesfai</surname> <given-names>H.</given-names></name> <name><surname>Saleh</surname> <given-names>H.</given-names></name> <name><surname>Mohammad</surname> <given-names>B.</given-names></name></person-group> (<year>2021</year>). <article-title>Rram-based cam combined with time-domain circuits for hyperdimensional computing</article-title>. <source>Sci. Rep</source>. <volume>11</volume>, <fpage>19848</fpage>. <pub-id pub-id-type="doi">10.21203/rs.3.rs-608660/v1</pub-id><pub-id pub-id-type="pmid">34615915</pub-id></citation></ref>
<ref id="B23">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hassabis</surname> <given-names>D.</given-names></name> <name><surname>Kumaran</surname> <given-names>D.</given-names></name> <name><surname>Summerfield</surname> <given-names>C.</given-names></name> <name><surname>Botvinick</surname> <given-names>M.</given-names></name></person-group> (<year>2017</year>). <article-title>Neuroscience-inspired artificial intelligence</article-title>. <source>Neuron</source> <volume>95</volume>, <fpage>245</fpage>&#x02013;<lpage>258</lpage>. <pub-id pub-id-type="doi">10.1016/j.neuron.2017.06.011</pub-id><pub-id pub-id-type="pmid">28728020</pub-id></citation></ref>
<ref id="B24">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>H&#x000E9;rnandez-Cano</surname> <given-names>A.</given-names></name> <name><surname>Cammarota</surname> <given-names>R.</given-names></name> <name><surname>Imani</surname> <given-names>M.</given-names></name></person-group> (<year>2021</year>). <article-title>Prid: model inversion privacy attacks in hyperdimensional learning systems</article-title>, in <source>2021 58th ACM/IEEE Design Automation Conference (DAC)</source> (<publisher-loc>San Francisco, CA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>553</fpage>&#x02013;<lpage>558</lpage>.</citation>
</ref>
<ref id="B25">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Hern&#x000E1;ndez-Cano</surname> <given-names>A.</given-names></name> <name><surname>Zhuo</surname> <given-names>C.</given-names></name> <name><surname>Yin</surname> <given-names>X.</given-names></name> <name><surname>Imani</surname> <given-names>M.</given-names></name></person-group> (<year>2021a</year>). <article-title>Reghd: robust and efficient regression in hyper-dimensional learning system</article-title>, in <source>2021 58th ACM/IEEE Design Automation Conference (DAC)</source> (<publisher-loc>San Francisco, CA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>7</fpage>&#x02013;<lpage>12</lpage>.</citation>
</ref>
<ref id="B26">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Hern&#x000E1;ndez-Cano</surname> <given-names>A.</given-names></name> <name><surname>Zhuo</surname> <given-names>C.</given-names></name> <name><surname>Yin</surname> <given-names>X.</given-names></name> <name><surname>Imani</surname> <given-names>M.</given-names></name></person-group> (<year>2021b</year>). <article-title>Real-time and robust hyperdimensional classification</article-title>, in <source>Proceedings of the 2021 on Great Lakes Symposium on VLSI</source>, <fpage>397</fpage>&#x02013;<lpage>402</lpage>.</citation>
</ref>
<ref id="B27">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Imani</surname> <given-names>M.</given-names></name> <name><surname>Gupta</surname> <given-names>S.</given-names></name> <name><surname>Kim</surname> <given-names>Y.</given-names></name> <name><surname>Rosing</surname> <given-names>T.</given-names></name></person-group> (<year>2019a</year>). <article-title>Floatpim: In-memory acceleration of deep neural network training with high precision</article-title>, in <source>2019 ACM/IEEE 46th Annual International Symposium on Computer Architecture (ISCA)</source> (<publisher-loc>Phoenix, AZ</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>802</fpage>&#x02013;<lpage>815</lpage>.</citation>
</ref>
<ref id="B28">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Imani</surname> <given-names>M.</given-names></name> <name><surname>Kim</surname> <given-names>Y.</given-names></name> <name><surname>Riazi</surname> <given-names>S.</given-names></name> <name><surname>Messerly</surname> <given-names>J.</given-names></name> <name><surname>Liu</surname> <given-names>P.</given-names></name> <name><surname>Koushanfar</surname> <given-names>F.</given-names></name> <etal/></person-group>. (<year>2019b</year>). <article-title>A framework for collaborative learning in secure high-dimensional space</article-title>, in <source>2019 IEEE 12th International Conference on Cloud Computing (CLOUD)</source> (<publisher-loc>Milan</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>435</fpage>&#x02013;<lpage>446</lpage>.</citation>
</ref>
<ref id="B29">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Imani</surname> <given-names>M.</given-names></name> <name><surname>Kong</surname> <given-names>D.</given-names></name> <name><surname>Rahimi</surname> <given-names>A.</given-names></name> <name><surname>Rosing</surname> <given-names>T.</given-names></name></person-group> (<year>2017a</year>). <article-title>Voicehd: Hyperdimensional computing for efficient speech recognition</article-title>, in <source>2017 IEEE International Conference on Rebooting Computing (ICRC)</source> (<publisher-loc>Washington, DC</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x02013;<lpage>8</lpage>.</citation>
</ref>
<ref id="B30">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Imani</surname> <given-names>M.</given-names></name> <name><surname>Morris</surname> <given-names>J.</given-names></name> <name><surname>Messerly</surname> <given-names>J.</given-names></name> <name><surname>Shu</surname> <given-names>H.</given-names></name> <name><surname>Deng</surname> <given-names>Y.</given-names></name> <name><surname>Rosing</surname> <given-names>T.</given-names></name></person-group> (<year>2019c</year>). <article-title>Bric: locality-based encoding for energy-efficient brain-inspired hyperdimensional computing</article-title>, in <source>Proceedings of the 56th Annual Design Automation Conference 2019</source> (<publisher-loc>Las Vegas, NV</publisher-loc>), <fpage>1</fpage>&#x02013;<lpage>6</lpage>.</citation>
</ref>
<ref id="B31">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Imani</surname> <given-names>M.</given-names></name> <name><surname>Pampana</surname> <given-names>S.</given-names></name> <name><surname>Gupta</surname> <given-names>S.</given-names></name> <name><surname>Zhou</surname> <given-names>M.</given-names></name> <name><surname>Kim</surname> <given-names>Y.</given-names></name> <name><surname>Rosing</surname> <given-names>T.</given-names></name></person-group> (<year>2020</year>). <article-title>Dual: acceleration of clustering algorithms using digital-based processing in-memory</article-title>, in <source>2020 53rd Annual IEEE/ACM International Symposium on Microarchitecture (MICRO)</source> (<publisher-loc>Athens</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>356</fpage>&#x02013;<lpage>371</lpage>.</citation>
</ref>
<ref id="B32">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Imani</surname> <given-names>M.</given-names></name> <name><surname>Rahimi</surname> <given-names>A.</given-names></name> <name><surname>Kong</surname> <given-names>D.</given-names></name> <name><surname>Rosing</surname> <given-names>T.</given-names></name> <name><surname>Rabaey</surname> <given-names>J. M.</given-names></name></person-group> (<year>2017b</year>). <article-title>Exploring hyperdimensional associative memory</article-title>, in <source>2017 IEEE International Symposium on High Performance Computer Architecture (HPCA)</source> (<publisher-loc>Austin, TX</publisher-loc>,: <publisher-name>IEEE</publisher-name>), <fpage>445</fpage>&#x02013;<lpage>456</lpage>.</citation>
</ref>
<ref id="B33">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Imani</surname> <given-names>M.</given-names></name> <name><surname>Yin</surname> <given-names>X.</given-names></name> <name><surname>Messerly</surname> <given-names>J.</given-names></name> <name><surname>Gupta</surname> <given-names>S.</given-names></name> <name><surname>Niemier</surname> <given-names>M.</given-names></name> <name><surname>Hu</surname> <given-names>X. S.</given-names></name> <etal/></person-group>. (<year>2019d</year>). <article-title>Searchd: a memory-centric hyperdimensional computing with stochastic training</article-title>. <source>IEEE Trans. Comput. Aided Design Integrat. Circ. Syst</source>. <volume>39</volume>, <fpage>2422</fpage>&#x02013;<lpage>2433</lpage>. <pub-id pub-id-type="doi">10.1109/TCAD.2019.2952544</pub-id><pub-id pub-id-type="pmid">27295638</pub-id></citation></ref>
<ref id="B34">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Imani</surname> <given-names>M.</given-names></name> <name><surname>Zou</surname> <given-names>Z.</given-names></name> <name><surname>Bosch</surname> <given-names>S.</given-names></name> <name><surname>Anantha Rao</surname> <given-names>S.</given-names></name> <name><surname>Salamat</surname> <given-names>S.</given-names></name> <name><surname>Kuma</surname> <given-names>V.</given-names></name></person-group> (<year>2021</year>). <article-title>Revisiting hyperdimensional learning for fpga and low-power architectures</article-title>, in <source>2021 IEEE International Symposium on High-Performance Computer Architecture (HPCA)</source> (<publisher-loc>Seoul</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>221</fpage>&#x02013;<lpage>234</lpage>.</citation>
</ref>
<ref id="B35">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Ji</surname> <given-names>X.</given-names></name> <name><surname>Henriques</surname> <given-names>J.</given-names></name> <name><surname>Tuytelaars</surname> <given-names>T.</given-names></name> <name><surname>Vedaldi</surname> <given-names>A.</given-names></name></person-group> (<year>2020</year>). <article-title>Automatic recall machines: Internal replay, continual learning and the brain</article-title>. <source>arXiv [Preprint] arXiv:</source>2006.12323.</citation>
</ref>
<ref id="B36">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Jouppi</surname> <given-names>N. P.</given-names></name> <name><surname>Young</surname> <given-names>C.</given-names></name> <name><surname>Patil</surname> <given-names>N.</given-names></name> <name><surname>Patterson</surname> <given-names>D.</given-names></name> <name><surname>Agrawal</surname> <given-names>G.</given-names></name> <name><surname>Bajwa</surname> <given-names>R.</given-names></name> <etal/></person-group>. (<year>2017</year>). <article-title>In-datacenter performance analysis of a tensor processing unit</article-title>, in <source>2017 ACM/IEEE 44th Annual International Symposium on Computer Architecture (ISCA)</source> (<publisher-loc>Toronto, ON</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x02013;<lpage>12</lpage>.</citation>
</ref>
<ref id="B37">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Kanerva</surname> <given-names>P.</given-names></name></person-group> (<year>1998</year>). <article-title>Encoding structure in boolean space</article-title>, in <source>ICANN, Vol. 98</source> (<publisher-loc>Los Angeles, CA</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>387</fpage>&#x02013;<lpage>392</lpage>.</citation>
</ref>
<ref id="B38">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kanerva</surname> <given-names>P.</given-names></name></person-group> (<year>2009</year>). <article-title>Hyperdimensional computing: An introduction to computing in distributed representation with high-dimensional random vectors</article-title>. <source>Cogn. Comput</source>. <volume>1</volume>, <fpage>139</fpage>&#x02013;<lpage>159</lpage>. <pub-id pub-id-type="doi">10.1007/s12559-009-9009-8</pub-id></citation>
</ref>
<ref id="B39">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Kanerva</surname> <given-names>P.</given-names></name> <name><surname>Kristofersson</surname> <given-names>J.</given-names></name> <name><surname>Holst</surname> <given-names>A.</given-names></name></person-group> (<year>2000</year>). <article-title>Random indexing of text samples for latent semantic analysis</article-title>, in <source>Proceedings of the 22nd Annual Conference of the Cognitive Science Society, Vol. 1036</source> (<publisher-loc>Philadelphia, PA</publisher-loc>).</citation>
</ref>
<ref id="B40">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Karpathy</surname> <given-names>A.</given-names></name> <name><surname>Fei-Fei</surname> <given-names>L.</given-names></name></person-group> (<year>2015</year>). <article-title>Deep visual-semantic alignments for generating image descriptions</article-title>, in <source>Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition</source> (<publisher-loc>Boston, MA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>3128</fpage>&#x02013;<lpage>3137</lpage>.<pub-id pub-id-type="pmid">27514036</pub-id></citation></ref>
<ref id="B41">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Karunaratne</surname> <given-names>G.</given-names></name> <name><surname>Le Gallo</surname> <given-names>M.</given-names></name> <name><surname>Hersche</surname> <given-names>M.</given-names></name> <name><surname>Cherubini</surname> <given-names>G.</given-names></name> <name><surname>Benini</surname> <given-names>L.</given-names></name> <name><surname>Sebastian</surname> <given-names>A.</given-names></name> <etal/></person-group>. (<year>2021</year>). <article-title>Energy efficient in-memory hyperdimensional encoding for spatio-temporal signal processing</article-title>. <source>IEEE Trans. Circ. Syst. II</source> <volume>68</volume>, <fpage>1725</fpage>&#x02013;<lpage>1729</lpage>. <pub-id pub-id-type="doi">10.1109/TCSII.2021.3068126</pub-id><pub-id pub-id-type="pmid">27295638</pub-id></citation></ref>
<ref id="B42">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Kim</surname> <given-names>Y.</given-names></name> <name><surname>Imani</surname> <given-names>M.</given-names></name> <name><surname>Moshiri</surname> <given-names>N.</given-names></name> <name><surname>Rosing</surname> <given-names>T.</given-names></name></person-group> (<year>2020</year>). <article-title>Geniehd: efficient dna pattern matching accelerator using hyperdimensional computing</article-title>, in <source>2020 Design, Automation &#x00026;Test in Europe Conference &#x00026;Exhibition (DATE)</source> (<publisher-loc>Grenoble</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>115</fpage>&#x02013;<lpage>120</lpage>.</citation>
</ref>
<ref id="B43">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Kim</surname> <given-names>Y.</given-names></name> <name><surname>Imani</surname> <given-names>M.</given-names></name> <name><surname>Rosing</surname> <given-names>T. S.</given-names></name></person-group> (<year>2018</year>). <article-title>Efficient human activity recognition using hyperdimensional computing</article-title>, in <source>Proceedings of the 8th International Conference on the Internet of Things</source> (<publisher-loc>New York, NY</publisher-loc>: <publisher-name>ACM</publisher-name>), <fpage>38</fpage>.</citation>
</ref>
<ref id="B44">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Kleyko</surname> <given-names>D.</given-names></name> <name><surname>Osipov</surname> <given-names>E.</given-names></name></person-group> (<year>2014</year>). <article-title>Brain-like classifier of temporal patterns</article-title>, in <source>2014 International Conference on Computer and Information Sciences (ICCOINS)</source> (<publisher-loc>Kuala Lumpur</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x02013;<lpage>6</lpage>.</citation>
</ref>
<ref id="B45">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kleyko</surname> <given-names>D.</given-names></name> <name><surname>Osipov</surname> <given-names>E.</given-names></name> <name><surname>Papakonstantinou</surname> <given-names>N.</given-names></name> <name><surname>Vyatkin</surname> <given-names>V.</given-names></name></person-group> (<year>2018</year>). <article-title>Hyperdimensional computing in industrial systems: the use-case of distributed fault isolation in a power plant</article-title>. <source>IEEE Access</source> <volume>6</volume>, <fpage>30766</fpage>&#x02013;<lpage>30777</lpage>. <pub-id pub-id-type="doi">10.1109/ACCESS.2018.2840128</pub-id><pub-id pub-id-type="pmid">27295638</pub-id></citation></ref>
<ref id="B46">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kousik</surname> <given-names>N.</given-names></name> <name><surname>Natarajan</surname> <given-names>Y.</given-names></name> <name><surname>Raja</surname> <given-names>R. A.</given-names></name> <name><surname>Kallam</surname> <given-names>S.</given-names></name> <name><surname>Patan</surname> <given-names>R.</given-names></name> <name><surname>Gandomi</surname> <given-names>A. H.</given-names></name></person-group> (<year>2021</year>). <article-title>Improved salient object detection using hybrid convolution recurrent neural network</article-title>. <source>Expert. Syst. Appl</source>. <volume>166</volume>:<fpage>114064</fpage>. <pub-id pub-id-type="doi">10.1016/j.eswa.2020.114064</pub-id></citation>
</ref>
<ref id="B47">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kvatinsky</surname> <given-names>S.</given-names></name> <name><surname>Belousov</surname> <given-names>D.</given-names></name> <name><surname>Liman</surname> <given-names>S.</given-names></name> <name><surname>Satat</surname> <given-names>G.</given-names></name> <name><surname>Wald</surname> <given-names>N.</given-names></name> <name><surname>Friedman</surname> <given-names>E. G.</given-names></name> <etal/></person-group>. (<year>2014</year>). <article-title>Magic memristor-aided logic</article-title>. <source>IEEE Trans. Circ. Syst. II</source> <volume>61</volume>, <fpage>895</fpage>&#x02013;<lpage>899</lpage>. <pub-id pub-id-type="doi">10.1109/TCSII.2014.2357292</pub-id><pub-id pub-id-type="pmid">33723989</pub-id></citation></ref>
<ref id="B48">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kvatinsky</surname> <given-names>S.</given-names></name> <name><surname>Ramadan</surname> <given-names>M.</given-names></name> <name><surname>Friedman</surname> <given-names>E. G.</given-names></name> <name><surname>Kolodny</surname> <given-names>A.</given-names></name></person-group> (<year>2015</year>). <article-title>Vteam: a general model for voltage-controlled memristors</article-title>. <source>IEEE Trans. Circ. Syst. II</source> <volume>62</volume>, <fpage>786</fpage>&#x02013;<lpage>790</lpage>. <pub-id pub-id-type="doi">10.1109/TCSII.2015.2433536</pub-id><pub-id pub-id-type="pmid">27295638</pub-id></citation></ref>
<ref id="B49">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lee</surname> <given-names>I.</given-names></name> <name><surname>Lee</surname> <given-names>K.</given-names></name></person-group> (<year>2015</year>). <article-title>The internet of things (iot): Applications, investments, and challenges for enterprises</article-title>. <source>Bus. Horiz</source>. <volume>58</volume>, <fpage>431</fpage>&#x02013;<lpage>440</lpage>. <pub-id pub-id-type="doi">10.1016/j.bushor.2015.03.008</pub-id></citation>
</ref>
<ref id="B50">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Li</surname> <given-names>H.</given-names></name> <name><surname>Wu</surname> <given-names>T. F.</given-names></name> <name><surname>Rahimi</surname> <given-names>A.</given-names></name> <name><surname>Li</surname> <given-names>K.-S.</given-names></name> <name><surname>Rusch</surname> <given-names>M.</given-names></name> <name><surname>Lin</surname> <given-names>C.-H.</given-names></name> <etal/></person-group>. (<year>2016</year>). <article-title>Hyperdimensional computing with 3d vrram in-memory kernels: device-architecture co-design for energy-efficient, error-resilient language recognition</article-title>, in <source>Electron Devices Meeting (IEDM), 2016 IEEE International</source> (<publisher-loc>San Francisco, CA</publisher-loc>: <publisher-name>IEEE</publisher-name>).</citation>
</ref>
<ref id="B51">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Lin</surname> <given-names>T.-Y.</given-names></name> <name><surname>Maire</surname> <given-names>M.</given-names></name> <name><surname>Belongie</surname> <given-names>S.</given-names></name> <name><surname>Hays</surname> <given-names>J.</given-names></name> <name><surname>Perona</surname> <given-names>P.</given-names></name> <name><surname>Ramanan</surname> <given-names>D.</given-names></name> <etal/></person-group>. (<year>2014</year>). <article-title>Microsoft coco: common objects in context</article-title>, in <source>European Conference on Computer Vision</source> (<publisher-loc>Zurich</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>740</fpage>&#x02013;<lpage>755</lpage>.</citation>
</ref>
<ref id="B52">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lumsdaine</surname> <given-names>A.</given-names></name> <name><surname>Gregor</surname> <given-names>D.</given-names></name> <name><surname>Hendrickson</surname> <given-names>B.</given-names></name> <name><surname>Berry</surname> <given-names>J.</given-names></name></person-group> (<year>2007</year>). <article-title>Challenges in parallel graph processing</article-title>. <source>Parallel Proces. Lett</source>. <volume>17</volume>, <fpage>5</fpage>&#x02013;<lpage>20</lpage>. <pub-id pub-id-type="doi">10.1142/S0129626407002843</pub-id></citation>
</ref>
<ref id="B53">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Ma</surname> <given-names>Y.</given-names></name> <name><surname>Hildebrandt</surname> <given-names>M.</given-names></name> <name><surname>Tresp</surname> <given-names>V.</given-names></name> <name><surname>Baier</surname> <given-names>S.</given-names></name></person-group> (<year>2018</year>). <article-title>Holistic representations for memorization and inference</article-title>, in <source>UAI</source> (<publisher-loc>Monterey, CA</publisher-loc>), <fpage>403</fpage>&#x02013;<lpage>413</lpage>.</citation>
</ref>
<ref id="B54">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Micikevicius</surname> <given-names>P.</given-names></name> <name><surname>Narang</surname> <given-names>S.</given-names></name> <name><surname>Alben</surname> <given-names>J.</given-names></name> <name><surname>Diamos</surname> <given-names>G.</given-names></name> <name><surname>Elsen</surname> <given-names>E.</given-names></name> <name><surname>Garcia</surname> <given-names>D.</given-names></name> <etal/></person-group>. (<year>2017</year>). <article-title>Mixed precision training</article-title>. <source>arXiv [Preprint] arXiv:</source>1710.03740.</citation>
</ref>
<ref id="B55">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mitrokhin</surname> <given-names>A.</given-names></name> <name><surname>Fermller</surname> <given-names>C.</given-names></name> <name><surname>Aloimonos</surname> <given-names>Y.</given-names></name></person-group> (<year>2019</year>). <article-title>Learning sensorimotor control with neuromorphic sensors: toward hyperdimensional active perception</article-title>. <source>Sci. Rob</source>. <volume>4</volume>:<fpage>30</fpage>. <pub-id pub-id-type="doi">10.1126/scirobotics.aaw6736</pub-id><pub-id pub-id-type="pmid">33137724</pub-id></citation></ref>
<ref id="B56">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Moin</surname> <given-names>A.</given-names></name> <name><surname>Zhou</surname> <given-names>A.</given-names></name> <name><surname>Rahimi</surname> <given-names>A.</given-names></name> <name><surname>Menon</surname> <given-names>A.</given-names></name> <name><surname>Benatti</surname> <given-names>S.</given-names></name> <name><surname>Alexandrov</surname> <given-names>G.</given-names></name> <etal/></person-group>. (<year>2021</year>). <article-title>A wearable biosensing system with in-sensor adaptive machine learning for hand gesture recognition</article-title>. <source>Nat. Electron</source>. <volume>4</volume>, <fpage>54</fpage>&#x02013;<lpage>63</lpage>. <pub-id pub-id-type="doi">10.1038/s41928-020-00510-8</pub-id></citation>
</ref>
<ref id="B57">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Montagna</surname> <given-names>F.</given-names></name> <name><surname>Rahimi</surname> <given-names>A.</given-names></name> <name><surname>Benatti</surname> <given-names>S.</given-names></name> <name><surname>Rossi</surname> <given-names>D.</given-names></name> <name><surname>Benini</surname> <given-names>L.</given-names></name></person-group> (<year>2018</year>). <article-title>Pulp-hd: accelerating brain-inspired high-dimensional computing on a parallel ultra-low power platform</article-title>, in <source>2018 55th ACM/ESDA/IEEE Design Automation Conference (DAC)</source> (<publisher-loc>San Francisco, CA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x02013;<lpage>6</lpage>.</citation>
</ref>
<ref id="B58">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Neubert</surname> <given-names>P.</given-names></name> <name><surname>Schubert</surname> <given-names>S.</given-names></name> <name><surname>Protzel</surname> <given-names>P.</given-names></name></person-group> (<year>2019</year>). <article-title>An introduction to hyperdimensional computing for robotics</article-title>. <source>KI-K&#x000FC;nstliche Intell</source>. <volume>33</volume>, <fpage>319</fpage>&#x02013;<lpage>330</lpage>. <pub-id pub-id-type="doi">10.1007/s13218-019-00623-z</pub-id></citation>
</ref>
<ref id="B59">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Nickel</surname> <given-names>M.</given-names></name> <name><surname>Rosasco</surname> <given-names>L.</given-names></name> <name><surname>Poggio</surname> <given-names>T.</given-names></name></person-group> (<year>2016</year>). <article-title>Holographic embeddings of knowledge graphs</article-title>. <source>In Proceedings of the AAAI Conference on Artificial Intelligence, volume 30</source>.</citation>
</ref>
<ref id="B60">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>O&#x00027;reilly</surname> <given-names>R. C.</given-names></name> <name><surname>Munakata</surname> <given-names>Y.</given-names></name></person-group> (<year>2000</year>). <source>Computational Explorations in Cognitive Neuroscience: Understanding the Mind by Simulating the Brain</source>. <publisher-loc>Cambridge, MA</publisher-loc>: <publisher-name>MIT Press</publisher-name>.</citation>
</ref>
<ref id="B61">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Pascanu</surname> <given-names>R.</given-names></name> <name><surname>Mikolov</surname> <given-names>T.</given-names></name> <name><surname>Bengio</surname> <given-names>Y.</given-names></name></person-group> (<year>2013</year>). <article-title>On the difficulty of training recurrent neural networks</article-title>, in <source>International Conference on Machine Learning</source> (<publisher-loc>Atlanta</publisher-loc>: <publisher-name>PMLR</publisher-name>), <fpage>1310</fpage>&#x02013;<lpage>1318</lpage>.</citation>
</ref>
<ref id="B62">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Pitas</surname> <given-names>I.</given-names></name></person-group> (<year>2016</year>). <source>Graph-Based Social Media Analysis, Vol. 39</source>. <publisher-loc>Boca Raton, FL</publisher-loc>: <publisher-name>CRC Press</publisher-name>.</citation>
</ref>
<ref id="B63">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Poduval</surname> <given-names>P.</given-names></name> <name><surname>Zou</surname> <given-names>Z.</given-names></name> <name><surname>Najafi</surname> <given-names>H.</given-names></name> <name><surname>Homayoun</surname> <given-names>H.</given-names></name> <name><surname>Imani</surname> <given-names>M.</given-names></name></person-group> (<year>2021b</year>). <article-title>Stochd: stochastic hyperdimensional system for efficient and robust learning from raw data</article-title>, in <source>IEEE/ACM Design Automation Conference (DAC)</source> (<publisher-loc>San Francisco, CA</publisher-loc>: <publisher-name>IEEE</publisher-name>).</citation>
</ref>
<ref id="B64">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Poduval</surname> <given-names>P.</given-names></name> <name><surname>Zou</surname> <given-names>Z.</given-names></name> <name><surname>Yin</surname> <given-names>X.</given-names></name> <name><surname>Sadredini</surname> <given-names>E.</given-names></name> <name><surname>Imani</surname> <given-names>M.</given-names></name></person-group> (<year>2021a</year>). <article-title>Cognitive correlative encoding for genome sequence matching in hyperdimensional system</article-title>, in <source>IEEE/ACM Design Automation Conference (DAC)</source> (<publisher-loc>San Francisco, CA</publisher-loc>: <publisher-name>IEEE</publisher-name>).</citation>
</ref>
<ref id="B65">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Rahimi</surname> <given-names>A.</given-names></name> <name><surname>Benatti</surname> <given-names>S.</given-names></name> <name><surname>Kanerva</surname> <given-names>P.</given-names></name> <name><surname>Benini</surname> <given-names>L.</given-names></name> <name><surname>Rabaey</surname> <given-names>J. M.</given-names></name></person-group> (<year>2016a</year>). <article-title>Hyperdimensional biosignal processing: a case study for emg-based hand gesture recognition</article-title>, in 2016 <italic>IEEE International Conference on Rebooting Computing (ICRC)</italic> (<publisher-loc>San Diego, CA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x02013;<lpage>8</lpage>.</citation>
</ref>
<ref id="B66">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Rahimi</surname> <given-names>A.</given-names></name> <name><surname>Kanerva</surname> <given-names>P.</given-names></name> <name><surname>Benini</surname> <given-names>L.</given-names></name> <name><surname>Rabaey</surname> <given-names>J. M.</given-names></name></person-group> (<year>2018</year>). <article-title>Efficient biosignal processing using hyperdimensional computing: network templates for combined learning and classification of exg signals</article-title>. <source>Proc. IEEE</source> <volume>107</volume>, <fpage>123</fpage>&#x02013;<lpage>143</lpage>. <pub-id pub-id-type="doi">10.1109/JPROC.2018.2871163</pub-id><pub-id pub-id-type="pmid">27295638</pub-id></citation></ref>
<ref id="B67">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Rahimi</surname> <given-names>A.</given-names></name> <name><surname>Kanerva</surname> <given-names>P.</given-names></name> <name><surname>Rabaey</surname> <given-names>J. M.</given-names></name></person-group> (<year>2016b</year>). <article-title>A robust and energy-efficient classifier using brain-inspired hyperdimensional computing</article-title>, in <source>ISLPED</source> (<publisher-loc>San Francisco, CA</publisher-loc>: <publisher-name>ACM</publisher-name>), <fpage>64</fpage>&#x02013;<lpage>69</lpage>.</citation>
</ref>
<ref id="B68">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Rallapalli</surname> <given-names>S.</given-names></name> <name><surname>Ma</surname> <given-names>L.</given-names></name> <name><surname>Srivatsa</surname> <given-names>M.</given-names></name> <name><surname>Swami</surname> <given-names>A.</given-names></name> <name><surname>Kwon</surname> <given-names>H.</given-names></name> <name><surname>Bent</surname> <given-names>G.</given-names></name> <etal/></person-group>. (<year>2019</year>). <article-title>Sense: semantically enhanced node sequence embedding</article-title>, in <source>2019 IEEE International Conference on Big Data (Big Data)</source> (<publisher-loc>Los Angeles, CA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>665</fpage>&#x02013;<lpage>670</lpage>.</citation>
</ref>
<ref id="B69">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>R&#x000E4;s&#x000E4;nen</surname> <given-names>O. J.</given-names></name> <name><surname>Saarinen</surname> <given-names>J. P.</given-names></name></person-group> (<year>2015</year>). <article-title>Sequence prediction with sparse distributed hyperdimensional coding applied to the analysis of mobile phone use patterns</article-title>. <source>IEEE Trans. Neural Netw. Learn. Syst</source>. <volume>27</volume>, <fpage>1878</fpage>&#x02013;<lpage>1889</lpage>. <pub-id pub-id-type="doi">10.1109/TNNLS.2015.2462721</pub-id><pub-id pub-id-type="pmid">26285224</pub-id></citation></ref>
<ref id="B70">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Reijneveld</surname> <given-names>J. C.</given-names></name> <name><surname>Ponten</surname> <given-names>S. C.</given-names></name> <name><surname>Berendse</surname> <given-names>H. W.</given-names></name> <name><surname>Stam</surname> <given-names>C. J.</given-names></name></person-group> (<year>2007</year>). <article-title>The application of graph theoretical analysis to complex networks in the brain</article-title>. <source>Clin. Neurophysiol</source>. <volume>118</volume>, <fpage>2317</fpage>&#x02013;<lpage>2331</lpage>. <pub-id pub-id-type="doi">10.1016/j.clinph.2007.08.010</pub-id><pub-id pub-id-type="pmid">17900977</pub-id></citation></ref>
<ref id="B71">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Ren</surname> <given-names>S.</given-names></name> <name><surname>He</surname> <given-names>K.</given-names></name> <name><surname>Girshick</surname> <given-names>R.</given-names></name> <name><surname>Sun</surname> <given-names>J.</given-names></name></person-group> (<year>2015</year>). <article-title>Faster r-cnn: towards real-time object detection with region proposal networks</article-title>. <source>arXiv [Preprint] arXiv:</source>1506.01497.<pub-id pub-id-type="pmid">27295650</pub-id></citation></ref>
<ref id="B72">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sahu</surname> <given-names>S.</given-names></name> <name><surname>Mhedhbi</surname> <given-names>A.</given-names></name> <name><surname>Salihoglu</surname> <given-names>S.</given-names></name> <name><surname>Lin</surname> <given-names>J.</given-names></name> <name><surname>&#x000D6;zsu</surname> <given-names>M. T.</given-names></name></person-group> (<year>2017</year>). <article-title>The ubiquity of large graphs and surprising challenges of graph processing</article-title>. <source>Proc. VLDB Endowment</source> <volume>11</volume>, <fpage>420</fpage>&#x02013;<lpage>431</lpage>. <pub-id pub-id-type="doi">10.1145/3186728.3164139</pub-id></citation>
</ref>
<ref id="B73">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Schacter</surname> <given-names>D. L.</given-names></name> <name><surname>Slotnick</surname> <given-names>S. D.</given-names></name></person-group> (<year>2004</year>). <article-title>The cognitive neuroscience of memory distortion</article-title>. <source>Neuron</source> <volume>44</volume>, <fpage>149</fpage>&#x02013;<lpage>160</lpage>. <pub-id pub-id-type="doi">10.1016/j.neuron.2004.08.017</pub-id><pub-id pub-id-type="pmid">15450167</pub-id></citation></ref>
<ref id="B74">
<citation citation-type="web"><person-group person-group-type="author"><name><surname>Simpkin</surname> <given-names>C.</given-names></name> <name><surname>Taylor</surname> <given-names>I.</given-names></name> <name><surname>Bent</surname> <given-names>G. A.</given-names></name> <name><surname>de Mel</surname> <given-names>G.</given-names></name> <name><surname>Rallapalli</surname> <given-names>S.</given-names></name></person-group> (<year>2017</year>). <source>Semantic workflow encoding using vector symbolic architectures</source>. Available online at: <ext-link ext-link-type="uri" xlink:href="https://orca.cardiff.ac.uk/112242/1/camera-ready-semanticworkflow-encoding.pdf">https://orca.cardiff.ac.uk/112242/1/camera-ready-semanticworkflow-encoding.pdf</ext-link></citation>
</ref>
<ref id="B75">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sodhani</surname> <given-names>S.</given-names></name> <name><surname>Chandar</surname> <given-names>S.</given-names></name> <name><surname>Bengio</surname> <given-names>Y.</given-names></name></person-group> (<year>2020</year>). <article-title>Toward training recurrent neural networks for lifelong learning</article-title>. <source>Neural Comput</source>. <volume>32</volume>, <fpage>1</fpage>&#x02013;<lpage>35</lpage>. <pub-id pub-id-type="doi">10.1162/neco_a_01246</pub-id><pub-id pub-id-type="pmid">31703175</pub-id></citation></ref>
<ref id="B76">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Stewart</surname> <given-names>T.</given-names></name> <name><surname>Choo</surname> <given-names>F.-X.</given-names></name> <name><surname>Eliasmith</surname> <given-names>C.</given-names></name></person-group> (<year>2012</year>). <article-title>Spaun: a perception-cognition-action model using spiking neurons</article-title>, in <source>Proceedings of the Annual Meeting of the Cognitive Science Society, Vol. 34</source> (<publisher-loc>Sapporo</publisher-loc>).</citation>
</ref>
<ref id="B77">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Tijms</surname> <given-names>B. M.</given-names></name> <name><surname>Wink</surname> <given-names>A. M.</given-names></name> <name><surname>de Haan</surname> <given-names>W.</given-names></name> <name><surname>van der Flier</surname> <given-names>W. M.</given-names></name> <name><surname>Stam</surname> <given-names>C. J.</given-names></name> <name><surname>Scheltens</surname> <given-names>P.</given-names></name> <etal/></person-group>. (<year>2013</year>). <article-title>Alzheimer&#x00027;s disease: connecting findings from graph theoretical studies of brain networks</article-title>. <source>Neurobiol. Aging</source> <volume>34</volume>, <fpage>2023</fpage>&#x02013;<lpage>2036</lpage>. <pub-id pub-id-type="doi">10.1016/j.neurobiolaging.2013.02.020</pub-id><pub-id pub-id-type="pmid">23541878</pub-id></citation></ref>
<ref id="B78">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Van Kranenburg</surname> <given-names>R.</given-names></name> <name><surname>Bassi</surname> <given-names>A.</given-names></name></person-group> (<year>2012</year>). <article-title>Iot challenges</article-title>. <source>Commun. Mobile Comput</source>. <volume>1</volume>, <fpage>1</fpage>&#x02013;<lpage>5</lpage>. <pub-id pub-id-type="doi">10.1186/2192-1121-1-9</pub-id></citation>
</ref>
<ref id="B79">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wiecki</surname> <given-names>T. V.</given-names></name> <name><surname>Poland</surname> <given-names>J.</given-names></name> <name><surname>Frank</surname> <given-names>M. J.</given-names></name></person-group> (<year>2015</year>). <article-title>Model-based cognitive neuroscience approaches to computational psychiatry: clustering and classification</article-title>. <source>Clin. Psychol. Sci</source>. <volume>3</volume>, <fpage>378</fpage>&#x02013;<lpage>399</lpage>. <pub-id pub-id-type="doi">10.1177/2167702614565359</pub-id></citation>
</ref>
<ref id="B80">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Zou</surname> <given-names>Z.</given-names></name> <name><surname>Alimohamadi</surname> <given-names>H.</given-names></name> <name><surname>Imani</surname> <given-names>F.</given-names></name> <name><surname>Kim</surname> <given-names>Y.</given-names></name> <name><surname>Imani</surname> <given-names>M.</given-names></name></person-group> (<year>2021a</year>). <article-title>Spiking hyperdimensional network: neuromorphic models integrated with memory-inspired framework</article-title>. <source>arXiv [Preprint] arXiv:</source>2110.00214.</citation>
</ref>
<ref id="B81">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Zou</surname> <given-names>Z.</given-names></name> <name><surname>Kim</surname> <given-names>Y.</given-names></name> <name><surname>Imani</surname> <given-names>F.</given-names></name> <name><surname>Alimohamadi</surname> <given-names>H.</given-names></name> <name><surname>Cammarota</surname> <given-names>R.</given-names></name> <name><surname>Imani</surname> <given-names>M.</given-names></name></person-group> (<year>2021b</year>). <article-title>Scalable edge-based hyperdimensional learning system with brain-like neural adaptation</article-title>, in <source>Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis</source> (<publisher-loc>St. Louis, MO</publisher-loc>), <fpage>1</fpage>&#x02013;<lpage>15</lpage>.</citation>
</ref>
</ref-list>
</back>
</article>