Close Menu
    Trending
    • Elizabeth Holmes’ Partner Starts Blood Testing Company
    • Will You Spot the Leaks? A Data Science Challenge
    • Police tech can sidestep facial recognition bans now
    • How Quantum Computing is Transforming Data Science Careers | by Suhas GM | May, 2025
    • Why AI Makes Your Brand Voice More Valuable Than Ever
    • Pause Your ML Pipelines for Human Review Using AWS Step Functions + Slack
    • Introducing Generative AI and Its Use Cases | by Parth Dangroshiya | May, 2025
    • How to Invest in the Growth of Your Business Despite An Uncertain Economy
    Finance StarGate
    • Home
    • Artificial Intelligence
    • AI Technology
    • Data Science
    • Machine Learning
    • Finance
    • Passive Income
    Finance StarGate
    Home»Artificial Intelligence»Attractors in Neural Network Circuits: Beauty and Chaos
    Artificial Intelligence

    Attractors in Neural Network Circuits: Beauty and Chaos

    FinanceStarGateBy FinanceStarGateMarch 25, 2025No Comments13 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Telegram Email
    Share
    Facebook Twitter LinkedIn Pinterest Email


    The state area of the primary two neuron activations over time follows an attractor.

    is one factor in frequent between reminiscences, oscillating chemical reactions and double pendulums? All these methods have a basin of attraction for attainable states, like a magnet that pulls the system in the direction of sure trajectories. Advanced methods with a number of inputs normally evolve over time, producing intricate and typically chaotic behaviors. Attractors symbolize the long-term behavioral sample of dynamical methods — a sample to which a system converges over time no matter its preliminary situations. 

    Neural networks have develop into ubiquitous in our present Artificial Intelligence period, sometimes serving as highly effective instruments for illustration extraction and sample recognition. Nevertheless, these methods may also be seen by one other fascinating lens: as dynamical methods that evolve and converge to a manifold of states over time. When applied with suggestions loops, even easy neural networks can produce strikingly stunning attractors, starting from restrict cycles to chaotic constructions.

    Neural Networks as Dynamical Programs

    Whereas neural networks typically sense are mostly identified for embedding extraction duties, they may also be seen as dynamical methods. A dynamical system describes how factors in a state area evolve over time based on a hard and fast algorithm or forces. Within the context of neural networks, the state area consists of the activation patterns of neurons, and the evolution rule is decided by the community’s weights, biases, activation capabilities, and different methods.

    Conventional NNs are optimized by way of gradient descent to search out its endstate of convergence. Nevertheless, once we introduce suggestions — connecting the output again to the enter — the community turns into a recurrent system with a unique type of temporal dynamic. These dynamics can exhibit a variety of behaviors, from easy convergence to a hard and fast level to complicated chaotic patterns.

    Understanding Attractors

    An attractor is a set of states towards which a system tends to evolve from all kinds of beginning situations. As soon as a system reaches an attractor, it stays inside that set of states until perturbed by an exterior drive. Attractors are certainly deeply concerned in forming reminiscences [1], oscillating chemical reactions [2], and different nonlinear dynamical methods. 

    Varieties of Attractors

    Dynamical Systems can exhibit a number of varieties of attractors, every with distinct traits:

    • Level Attractors: the only type, the place the system converges to a single mounted level no matter beginning situations. This represents a secure equilibrium state.
    • Restrict Cycles: the system settles right into a repeating periodic orbit, forming a closed loop in part area. This represents oscillatory habits with a hard and fast interval.
    • Toroidal (Quasiperiodic) Attractors: the system follows trajectories that wind round a donut-like construction within the part area. In contrast to restrict cycles, these trajectories by no means actually repeat however they continue to be sure to a particular area.
    • Unusual (Chaotic) Attractors: characterised by aperiodic habits that by no means repeats precisely but stays bounded inside a finite area of part area. These attractors exhibit delicate dependence on preliminary situations, the place a tiny distinction will introduce vital penalties over time — an indicator of chaos. Suppose butterfly impact.

    Setup

    Within the following part, we are going to dive deeper into an instance of a quite simple NN structure able to mentioned habits, and show some fairly examples. We are going to contact on Lyapunov exponents, and supply implementation for many who want to experiment with producing their very own Neural Network attractor artwork (and never within the generative AI sense).

    Determine 1. NN schematic and parts that we’ll use for the attractor technology. [all figures are created by the author, unless stated otherwise]

    We are going to use a grossly simplified one-layer NN with a suggestions loop. The structure consists of:

    1. Enter Layer:
      • Array of dimension D (right here 16-32) inputs
      • We are going to unconventionally label them as y₁, y₂, y₃, …, yD to spotlight that these are mapped from the outputs
      • Acts as a shift register that shops earlier outputs
    2. Hidden Layer:
      • Accommodates N neurons (right here fewer than D, ~4-8)
      • We are going to label them x₁, x₂, …, xN
      • tanh() activation is utilized for squashing
    3. Output Layer
      • Single output neuron (y₀)
      • Combines the hidden layer outputs with biases — sometimes, we use biases to offset outputs by including them; right here, we used them for scaling, so they’re factually an array of weights
    4. Connections:
      • Enter to Hidden: Weight matrix w[i,j] (randomly initialized between -1 and 1)
      • Hidden to Output: Bias weights b[i] (randomly initialized between 0 and s)
    5. Suggestions Loop:
      • The output y₀ is fed again to the enter layer, making a dynamic map
      • Acts as a shift register (y₁ = earlier y₀, y₂ = earlier y₁, and many others.)
      • This suggestions is what creates the dynamical system habits
    6. Key Formulation:
      • Hidden layer: u[i] = Σ(w[i,j] * y[j]); x[i] = tanh(u[i])
      • Output: y₀ = Σ(b[i] * x[i])

    The important points that make this community generate attractors:

    • The suggestions loop turns a easy feedforward community right into a dynamical system
    • The nonlinear activation perform (tanh) allows complicated behaviors
    • The random weight initialization (managed by the random seed) creates completely different attractor patterns
    • The scaling issue s impacts the dynamics of the system and may push it into chaotic regimes

    With a view to examine how susceptible the system is to chaos, we are going to calculate the Lyapunov exponents for various units of parameters. Lyapunov exponent is a measure of the instability of a dynamical system…

    [delta Z(t)| approx e^{lambda t} |delta (Z(0))|]

    [lambda = n_t sum_{k=0}^{n_t-1} ln frac{|Delta y_{k+1}|}]

    …the place nt​ is quite a few time steps, Δyok ​is a distance between the states y(xi) and y(xi+ϵ) at a cut-off date; ΔZ(0) represents an preliminary infinitesimal (very small) separation between two close by beginning factors, and ΔZ(t) is the separation after time t. For secure methods converging to a hard and fast level or a secure attractor this parameter is lower than 0, for unstable (diverging, and, due to this fact, chaotic methods) it’s larger than 0.

    Let’s code it up! We are going to solely use NumPy and default Python libraries for the implementation.

    import numpy as np
    from typing import Tuple, Listing, Optionally available
    
    
    class NeuralAttractor:
        """
        
        N : int
            Variety of neurons within the hidden layer
        D : int
            Dimension of the enter vector
        s : float
            Scaling issue for the output
    
        """
        
        def __init__(self, N: int = 4, D: int = 16, s: float = 0.75, seed: Optionally available[int] = 
    None):
            self.N = N
            self.D = D
            self.s = s
            
            if seed isn't None:
                np.random.seed(seed)
            
            # Initialize weights and biases
            self.w = 2.0 * np.random.random((N, D)) - 1.0  # Uniform in [-1, 1]
            self.b = s * np.random.random(N)  # Uniform in [0, s]
            
            # Initialize state vector constructions
            self.x = np.zeros(N)  # Neuron states
            self.y = np.zeros(D)  # Enter vector

    We initialize the NeuralAttractor class with some primary parameters — variety of neurons within the hidden layer, variety of components within the enter array, scaling issue for the output, and random seed. We proceed to initialize the weights and biases randomly, and x and y states. These weights and biases won’t be optimized — they may keep put, no gradient descent this time.

        def reset(self, init_value: float = 0.001):
            """Reset the community state to preliminary situations."""
            self.x = np.ones(self.N) * init_value
            self.y = np.zeros(self.D)
            
        def iterate(self) -> np.ndarray:
            """
            Carry out one iteration of the community and return the neuron outputs.
            
            """
            # Calculate the output y0
            y0 = np.sum(self.b * self.x)
            
            # Shift the enter vector
            self.y[1:] = self.y[:-1]
            self.y[0] = y0
            
            # Calculate the neuron inputs and apply activation fn
            for i in vary(self.N):
                u = np.sum(self.w[i] * self.y)
                self.x[i] = np.tanh(u)
                
            return self.x.copy()

    Subsequent, we are going to outline the iteration logic. We begin each iteration with the suggestions loop — we implement the shift register circuit by shifting all y components to the correct, and compute the newest y0 output to put it into the primary component of the enter.

        def generate_trajectory(self, tmax: int, discard: int = 0) -> Tuple[np.ndarray, 
    np.ndarray]:
            """
            Generate a trajectory of the states for tmax iterations.
            
            -----------
            tmax : int
                Complete variety of iterations
            discard : int
                Variety of preliminary iterations to discard
    
            """
            self.reset()
            
            # Discard preliminary transient
            for _ in vary(discard):
                self.iterate()
            
            x1_traj = np.zeros(tmax)
            x2_traj = np.zeros(tmax)
            
            for t in vary(tmax):
                x = self.iterate()
                x1_traj[t] = x[0]
                x2_traj[t] = x[1]
                
            return x1_traj, x2_traj

    Now, we outline the perform that may iterate our community map over the tmax variety of time steps and output the states of the primary two hidden neurons for visualization. We are able to use any hidden neurons, and we may even visualize 3D state area, however we are going to restrict our creativeness to 2 dimensions.

    That is the gist of the system. Now, we are going to simply outline some line and section magic for fairly visualizations.

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.collections as mcoll
    import matplotlib.path as mpath
    from typing import Tuple, Optionally available, Callable
    
    
    def make_segments(x: np.ndarray, y: np.ndarray) -> np.ndarray:
        """
        Create listing of line segments from x and y coordinates.
        
        -----------
        x : np.ndarray
            X coordinates
        y : np.ndarray
            Y coordinates
    
        """
        factors = np.array([x, y]).T.reshape(-1, 1, 2)
        segments = np.concatenate([points[:-1], factors[1:]], axis=1)
        return segments
    
    
    def colorline(
        x: np.ndarray,
        y: np.ndarray,
        z: Optionally available[np.ndarray] = None,
        cmap = plt.get_cmap("jet"),
        norm = plt.Normalize(0.0, 1.0),
        linewidth: float = 1.0,
        alpha: float = 0.05,
        ax = None
    ):
        """
        Plot a coloured line with coordinates x and y.
        
        -----------
        x : np.ndarray
            X coordinates
        y : np.ndarray
            Y coordinates
    
        """
        if ax is None:
            ax = plt.gca()
            
        if z is None:
            z = np.linspace(0.0, 1.0, len(x))
        
        segments = make_segments(x, y)
        lc = mcoll.LineCollection(
            segments, array=z, cmap=cmap, norm=norm, linewidth=linewidth, alpha=alpha
        )
        ax.add_collection(lc)
        
        return lc
    
    
    def plot_attractor_trajectory(
        x: np.ndarray,
        y: np.ndarray,
        skip_value: int = 16,
        color_function: Optionally available[Callable] = None,
        cmap = plt.get_cmap("Spectral"),
        linewidth: float = 0.1,
        alpha: float = 0.1,
        figsize: Tuple[float, float] = (10, 10),
        interpolate_steps: int = 3,
        output_path: Optionally available[str] = None,
        dpi: int = 300,
        present: bool = True
    ):
        """
        Plot an attractor trajectory.
        
        Parameters:
        -----------
        x : np.ndarray
            X coordinates
        y : np.ndarray
            Y coordinates
        skip_value : int
            Variety of factors to skip for sparser plotting
    
        """
        fig, ax = plt.subplots(figsize=figsize)
        
        if interpolate_steps > 1:
            path = mpath.Path(np.column_stack([x, y]))
            verts = path.interpolated(steps=interpolate_steps).vertices
            x, y = verts[:, 0], verts[:, 1]
        
        x_plot = x[::skip_value]
        y_plot = y[::skip_value]
        
        if color_function is None:
            z = abs(np.sin(1.6 * y_plot + 0.4 * x_plot))
        else:
            z = color_function(x_plot, y_plot)
        
        colorline(x_plot, y_plot, z, cmap=cmap, linewidth=linewidth, alpha=alpha, ax=ax)
        
        ax.set_xlim(x.min(), x.max())
        ax.set_ylim(y.min(), y.max())
        
        ax.set_axis_off()
        ax.set_aspect('equal')
        
        plt.tight_layout()
        
        if output_path:
            fig.savefig(output_path, dpi=dpi, bbox_inches='tight')
    
        return fig

    The capabilities written above will take the generated state area trajectories and visualize them. As a result of the state area could also be densely stuffed, we are going to skip each eighth, sixteenth or 32th time level to sparsify our vectors. We additionally don’t need to plot these in a single strong colour, due to this fact we’re coding the colour as a periodic perform (np.sin(1.6 * y_plot + 0.4 * x_plot)) based mostly on the x and y coordinates of the determine axis. The multipliers for the coordinates are arbitrary and occur to generate good clean colour maps, to your liking.

    N = 4
    D = 32
    s = 0.22
    seed=174658140
    
    tmax = 100000
    discard = 1000
    
    nn = NeuralAttractor(N, D, s, seed=seed)
    
    # Generate trajectory
    x1, x2 = nn.generate_trajectory(tmax, discard)
    
    plot_attractor_trajectory(
        x1, x2,
        output_path='trajectory.png',
    )

    After defining the NN and iteration parameters, we will generate the state area trajectories. If we spend sufficient time poking round with parameters, we are going to discover one thing cool (I promise!). If handbook parameter grid search labor isn’t precisely our factor, we may add a perform that checks what proportion of the state area is roofed over time. If after t = 100,000 iterations (besides the preliminary 1,000 “heat up” time steps) we solely touched a slender vary of values of the state area, we’re doubtless caught in a degree. As soon as we discovered an attractor that isn’t so shy to take up extra state area, we will plot it utilizing default plotting params:

    Determine 2. Restrict cycle attractor.

    One of many secure varieties of attractors is the restrict cycle attractor (parameters: N = 4, D = 32, s = 0.22, seed = 174658140). It appears like a single, closed loop trajectory in part area. The orbit follows an everyday, periodic path over time collection. I cannot embody the code for Lyapunov exponent calculation right here to give attention to the visible side of the generated attractors extra, however one can discover it beneath this link, if . The Lyapunov exponent for this attractor (λ=−3.65) is unfavorable, indicating stability: mathematically, this exponent will result in the state of the system decaying, or converging, to this basin of attraction over time.

    If we maintain growing the scaling issue, we usually tend to tune up the values within the circuit, and maybe extra prone to discover one thing attention-grabbing.

    Determine 3. Toroidal attractor.

    Right here is the toroidal (quasiperiodic) attractor (parameters: N = 4, D = 32, s = 0.55, seed = 3160697950). It nonetheless has an ordered construction of sheets that wrap round in organized, quasiperiodic patterns. The Lyapunov exponent for this attractor has a better worth, however continues to be unfavorable (λ=−0.20).

    As we additional improve the scaling issue s, the system turns into extra liable to chaos. The unusual (chaotic) attractor emerges with the next parameters: N = 4, D = 16, s = 1.4, seed = 174658140). It’s characterised by an erratic, unpredictable sample of trajectories that by no means repeat. The Lyapunov exponent for this attractor is optimistic (λ=0.32), indicating instability (divergence from an initially very shut state over time) and chaotic habits. That is the “butterfly impact” attractor.

    Determine 4. Unusual attractor.

    As we additional improve the scaling issue s, the system turns into extra liable to chaos. The unusual (chaotic) attractor emerges with the next parameters: N = 4, D = 16, s = 1.4, seed = 174658140. It’s characterised by an erratic, unpredictable sample of trajectories that by no means repeat. The Lyapunov exponent for this attractor is optimistic (λ=0.32), indicating instability (divergence from an initially very shut state over time) and chaotic habits. That is the “butterfly impact” attractor.

    Simply one other affirmation that aesthetics will be very mathematical, and vice versa. Probably the most visually compelling attractors typically exist on the fringe of chaos — give it some thought for a second! These constructions are complicated sufficient to exhibit intricate habits, but ordered sufficient to keep up coherence. This resonates with observations from numerous artwork varieties, the place stability between order and unpredictability typically creates probably the most participating experiences.

    An interactive widget to generate and visualize these attractors is on the market here. The supply code is available, too, and invitations additional exploration. The concepts behind this venture had been largely impressed by the work of J.C. Sprott [3]. 

    References

    [1] B. Poucet and E. Save, Attractors in Reminiscence (2005), Science DOI:10.1126/science.1112555.

    [2] Y.J.F. Kpomahou et al., Chaotic Behaviors and Coexisting Attractors in a New Nonlinear Dissipative Parametric Chemical Oscillator (2022), Complexity DOI:10.1155/2022/9350516.

    [3] J.C. Sprott, Synthetic Neural Internet Attractors (1998), Computer systems & Graphics DOI:10.1016/S0097-8493(97)00089-7.



    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Previous ArticleHow Categorical Labels Distort Clustering Results | by Taaaha | Mar, 2025
    Next Article More Than a Quarter of Your Email List May Be Bad – Here Are 5 Ways to Clean It
    FinanceStarGate

    Related Posts

    Artificial Intelligence

    Will You Spot the Leaks? A Data Science Challenge

    May 13, 2025
    Artificial Intelligence

    Pause Your ML Pipelines for Human Review Using AWS Step Functions + Slack

    May 13, 2025
    Artificial Intelligence

    The Westworld Blunder | Towards Data Science

    May 13, 2025
    Add A Comment

    Comments are closed.

    Top Posts

    Reinforcement Learning from One Example?

    May 1, 2025

    Japanese-Chinese Translation with GenAI: What Works and What Doesn’t

    March 27, 2025

    CPI Report: Inflation Rose in January. Will the Fed Cut Rates?

    February 13, 2025

    TL;DW (YouTube Learning Aid). Introduction | by Diya Saha | Apr, 2025

    April 11, 2025

    Changing the World via AI … with Five Kids in Tow

    February 17, 2025
    Categories
    • AI Technology
    • Artificial Intelligence
    • Data Science
    • Finance
    • Machine Learning
    • Passive Income
    Most Popular

    A data designer driven to collaborate with communities | MIT News

    February 16, 2025

    Do European M&Ms Actually Taste Better than American M&Ms?

    February 22, 2025

    The One Mistake Is Putting Your Brand Reputation at Risk — and Most Startups Still Make It

    April 18, 2025
    Our Picks

    How This Entrepreneur is Bringing Golf Back into the Spotlight

    March 2, 2025

    3 Unseen Advantages of Mentoring Other Entrepreneurs

    April 20, 2025

    Wjdj – الهام – Medium

    March 16, 2025
    Categories
    • AI Technology
    • Artificial Intelligence
    • Data Science
    • Finance
    • Machine Learning
    • Passive Income
    • Privacy Policy
    • Disclaimer
    • Terms and Conditions
    • About us
    • Contact us
    Copyright © 2025 Financestargate.com All Rights Reserved.

    Type above and press Enter to search. Press Esc to cancel.