Skip to content

14 - Neuroadaptive Architecture

EEG-Informed Cognitive Architecture Extension


SCIENTIFIC BOUNDARY: EEG does not read thoughts directly. EEG does not capture or transfer consciousness. EEG-based personalization does NOT make any AI system conscious. This module estimates neural/cognitive-state proxies only — no claims about subjective experience are implied or supported. The neuroadaptive extension conditions the CIA cognitive architecture based on statistical EEG features; it does not transfer identity, consciousness, or subjective experience.


1. Overview and Purpose

The neuroadaptive extension adds an optional EEG/BCI (Brain-Computer Interface) data pathway to the Consciousness-Indicator Architecture (CIA). Its purpose is to explore how externally measured neural signals can inform and modulate the cognitive architecture's internal parameters, creating a closed-loop system where the AI system's processing is indirectly influenced by the human participant's measured cognitive state.

The extension is designed as a research tool for investigating neuroadaptive AI — the idea that an AI system can adjust its computational behavior based on real-time or near-real-time measurements of the human operator's cognitive state. This has potential applications in human-AI collaboration, adaptive interfaces, and cognitive load management, but it must be clearly understood that the system does not become conscious, does not acquire the participant's identity, and does not read their thoughts.

The neuroadaptive extension is implemented in the cia.neuro package and consists of the following core modules:

Module Purpose
eeg_ingestion Load and window EEG data from CSV, JSON, NumPy, and BIDS formats
eeg_preprocessing Detrend, normalize, bandpass filter, and detect artifacts
eeg_feature_extraction Compute frequency-band powers, spectral ratios, and signal quality
neural_state_encoder Map EEG features to cognitive-state proxy estimates
neuroadaptive_conditioning Convert proxy estimates into control signals for CIA components
subject_profile Manage per-subject calibration profiles
cognitive_state_decoder Translate proxy estimates into categorical labels
bci_adapter High-level closed-loop BCI-CIA orchestration
online_signal_stream Abstract base class and mock stream for EEG data sources
bids_utils BIDS dataset validation, summarization, and OpenNeuro integration
safety Recording plan evaluation, consent checking, and safety enforcement
schemas Pydantic data models for all pipeline stages

All modules include explicit scientific boundary disclaimers in their docstrings and output schemas. The NeuroSafetyPolicy provides automated safety checks that must be satisfied before any recording session proceeds.


2. EEG Ingestion Pipeline

The ingestion pipeline loads raw EEG data from multiple file formats and segments it into fixed-duration windows for downstream processing. This is implemented in cia.neuro.eeg_ingestion.EEGIngestion.

Supported Formats

CSV: Rows represent time points, columns represent channels. An optional header row provides channel names. The CSV format is the simplest and most widely compatible format for EEG data exchange.

metadata, windows = ingestion.from_csv(
    path="recording.csv",
    sampling_rate_hz=250.0,
    channel_names=["Fz", "Cz", "Pz", "Oz"],
    subject_id="sub-001",
)

JSON: A structured dictionary with keys sampling_rate_hz, channels (list of channel names), and data (list of lists with shape [n_channels, n_samples]). This format is self-describing and embeds metadata alongside the data.

metadata, windows = ingestion.from_json(path="recording.json", subject_id="sub-001")

NumPy (.npy): A 2-D array with shape [n_channels, n_samples] (default) or [n_samples, n_channels]. Channel names and sampling rate must be provided separately. This format is efficient for large datasets and is commonly used in Python-based EEG workflows.

metadata, windows = ingestion.from_numpy(
    path="recording.npy",
    sampling_rate_hz=500.0,
    channel_names=["Fp1", "Fp2", "F3", "F4"],
    subject_id="sub-001",
)

BIDS folders: Brain Imaging Data Structure (BIDS) compliant EEG datasets with BrainVision (.vhdr), EDF (.edf), BDF (.bdf), or other supported formats. BIDS ingestion requires mne and mne-bids to be installed. The BIDS format is the recommended format for standardized, interoperable EEG data storage.

metadata, windows = ingestion.from_bids_folder(
    path="datasets/ds000001",
    subject="01",
    task="rest",
)

Windowing

All ingestion methods segment the continuous EEG data into fixed-duration, optionally overlapping windows. The EEGIngestion constructor accepts two parameters:

  • window_seconds: Duration of each window (default: 1.0 second)
  • step_seconds: Step between successive windows (default: 0.5 seconds, producing 50% overlap)

Each window is represented as an EEGWindow Pydantic model containing: - data: list[list[float]] with shape [n_channels, n_samples] - channel_names: List of channel name strings - sampling_rate_hz: Sampling rate in Hz - start_time_seconds: Start time of the window relative to recording start - duration_seconds: Window duration in seconds - metadata: Optional dictionary for additional information


3. Preprocessing Steps

The preprocessing pipeline in cia.neuro.eeg_preprocessing.EEGPreprocessor applies a sequence of signal processing operations to each EEG window. These are research-grade utilities — not clinical-grade preprocessing. All steps are deterministic and use only Python stdlib and NumPy.

3.1 Linear Detrending

Removes the linear trend from each channel by fitting a least-squares line and subtracting it. This eliminates slow DC drifts that can dominate the signal and bias spectral analysis. The detrending algorithm fits y = a*x + b using the method of least squares and subtracts the fitted line from the signal.

3.2 Z-Score Normalization

Normalizes each channel to zero mean and unit variance by subtracting the channel mean and dividing by the channel standard deviation. This makes channels comparable across different amplitude ranges and facilitates downstream statistical analysis. Channels with zero standard deviation (flatline) are set to all zeros.

3.3 FFT-Based Bandpass Filtering

Applies a simple bandpass filter by computing the FFT of each channel, zeroing out frequency bins outside the passband, and inverse FFT-ing. Default passband: 1–40 Hz (covering delta through gamma bands). This is a rough placeholder filter — it does not implement proper FIR/IIR design with sharp roll-off, linear phase, or stop-band attenuation. For research-grade filtering, use scipy.signal (Butterworth, Chebyshev, FIR) or MNE-Python's filtering tools.

3.4 Artifact Detection

Detects common EEG artifact types per channel:

Artifact Type Detection Criterion Interpretation
Flatline Standard deviation < 1e-6 µV Dead or disconnected electrode
Extreme amplitude Any sample > 500 µV Amplifier saturation or movement
High variance Standard deviation > 100 µV Persistent noise source
Missing values NaN or Inf present Data corruption or gaps

The detect_artifacts() method returns a dictionary mapping artifact type to a list of affected channel indices. The clean() method runs the full pipeline (detrend → normalize → bandpass → detect) and produces a PreprocessedEEGWindow with cleaned data, artifact report, and a quality score (0.0–1.0).


4. Feature Extraction

The feature extraction module in cia.neuro.eeg_feature_extraction.EEGFeatureExtractor computes frequency-domain features from preprocessed EEG windows. Features are computed using either scipy.signal.welch (preferred, if available) or a manual NumPy FFT fallback.

4.1 Bandpower Computation

Power spectral density is estimated for five canonical EEG frequency bands:

Band Frequency Range Typical Association
Delta 0.5–4 Hz Deep sleep, slow cortical potentials
Theta 4–8 Hz Drowsiness, meditation, working memory
Alpha 8–13 Hz Relaxed wakefulness, closed eyes
Beta 13–30 Hz Active concentration, alertness
Gamma 30–45 Hz Cognitive processing, perception

Bandpower is computed per channel by integrating the power spectral density over each band's frequency range using the trapezoidal rule. The compute_bandpower() method returns a nested dictionary {band_name: {channel_name: power_value}}.

4.2 Spectral Ratios

Two spectral ratios are computed from the aggregate (mean across channels) bandpowers:

  • Alpha/Beta Ratio: aggregate_alpha_power / aggregate_beta_power. Higher values suggest relaxed attention or eyes-closed state. Lower values suggest active engagement or cognitive load.
  • Theta/Beta Ratio: aggregate_theta_power / aggregate_beta_power. Higher values suggest fatigue, drowsiness, or reduced vigilance. Lower values suggest alertness.

Both ratios use safe division (return 0.0 when the denominator is zero or negative) and are provided as static methods on the extractor class.

4.3 Signal Quality

A heuristic signal quality score (0.0–1.0) is computed based on artifact detection across four dimensions:

  1. Flatline detection: Very low variance channels score 0.0
  2. Clipping/saturation: Amplitudes > 500 µV penalize by 0.5, > 200 µV by 0.2
  3. Peak-to-peak variability: High coefficient of variation across segments indicates transient artifacts
  4. High-frequency noise: Power above 45 Hz relative to total power penalizes noisy channels

The overall quality score is the mean of per-channel scores.

4.4 EEGFeatureVector

The extract() method produces an EEGFeatureVector Pydantic model containing:

EEGFeatureVector(
    bandpowers={...},           # Per-band, per-channel power values
    aggregate_bandpowers={...}, # Per-band mean across channels
    alpha_beta_ratio=1.234,     # Alpha/beta spectral ratio
    theta_beta_ratio=0.876,     # Theta/beta spectral ratio
    signal_quality=0.92,        # 0-1 quality score
    artifact_score=0.08,        # 0-1 artifact score (inverse of quality)
    timestamp=datetime(...),
    metadata={...},
)

5. Neural State Encoding

The neural state encoder in cia.neuro.neural_state_encoder.NeuralStateEncoder maps EEG features to conservative cognitive-state proxy estimates using transparent, rule-based heuristics. This module produces the proxy estimates that drive the neuroadaptive conditioning loop.

Encoding Rules

The encoder applies deterministic, fully documented heuristic rules to map bandpower features to proxy estimates on a 0–1 scale:

Proxy Heuristic Rule
Attention Higher alpha dominance (alpha/beta ratio) → higher attention proxy. When a baseline is fitted, the estimate uses z-score deviation of alpha and beta from the baseline.
Workload Inverse of attention heuristic. Higher alpha dominance → lower workload (alpha suppression is associated with active cognitive processing).
Arousal Beta + gamma power relative to total power. Higher beta+gamma proportion → higher arousal proxy.
Fatigue Higher theta/beta ratio → higher fatigue proxy. This follows the well-established relationship between theta/beta ratio and vigilance in the EEG literature.
Prediction Error Derived from gamma band power (higher gamma → higher prediction error proxy). Gamma power is associated with prediction violation and surprise in predictive processing frameworks.
Confidence Weighted combination of signal quality (70%) and inverse artifact score (30%). Low quality → lower confidence, higher uncertainty.

Baseline Calibration

The encoder supports per-subject calibration via fit_baseline(). When a baseline is available (from resting-state or initial-session data), proxy estimates are derived from z-score deviations relative to the baseline rather than from population-level heuristics. This significantly improves proxy accuracy by accounting for individual variability in EEG features.

The compare_to_baseline() method computes z-scores for each band and ratio, allowing researchers to monitor how much the current state deviates from the individual's baseline.

NeuralStateEstimate Output

NeuralStateEstimate(
    attention_proxy=0.723,        # 0-1 attention level proxy
    workload_proxy=0.277,        # 0-1 workload proxy
    arousal_proxy=0.456,         # 0-1 arousal proxy
    fatigue_proxy=0.134,         # 0-1 fatigue proxy
    prediction_error_proxy=0.412,# 0-1 prediction error proxy
    confidence=0.85,             # 0-1 confidence in estimates
    uncertainty=0.15,            # 0-1 uncertainty
    caveat="Neural-state estimates are proxies and do not decode thoughts or consciousness...",
)

Every NeuralStateEstimate includes an explicit caveat string stating that the values are proxy estimates and do not decode thoughts or consciousness.


6. Subject Profiles and Calibration

The subject profile manager in cia.neuro.subject_profile.SubjectProfileManager creates, updates, persists, and summarizes per-subject calibration profiles. Profiles capture individual EEG characteristics for personalized proxy estimation.

Profile Structure

A SubjectNeuroProfile stores:

  • Baseline features: Aggregate bandpowers and spectral ratios from prior sessions
  • Individual calibration offsets: Per-proxy systematic bias corrections (difference between proxy estimate and midpoint 0.5)
  • Known limitations: Accumulated list of data quality warnings and caveats
  • Sessions seen: Number of sessions used to build the profile
  • Drift score: Normalized measure of how much recent features deviate from the baseline (0 = no drift, 1 = maximum deviation)

Profile Update Cycle

Profiles are updated after each session using an exponential moving average (EMA) with alpha = 0.3:

  1. Baseline bandpowers are updated: baseline = 0.7 * baseline + 0.3 * new_value
  2. Spectral ratio baselines are updated similarly
  3. Individual calibration offsets are computed: offset = proxy - 0.5
  4. Session counter is incremented
  5. Known limitations are updated if signal quality was poor or artifact score was high

Drift Detection

The compute_drift() method measures how much recent EEG features have deviated from the stored baseline. It computes normalized per-band deviations, takes the root-mean-square, and applies a saturating tanh transform to produce a score in [0, 1]. A high drift score may indicate: electrode displacement, changed environmental conditions, natural variability over time, or the need for baseline recalibration.

Persistence

Profiles are saved to and loaded from JSON files, making them portable across sessions and machines. The caveat is always enforced on load — even if the stored profile has a modified caveat, the canonical disclaimer is restored:

"This profile captures statistical EEG features only. It does NOT capture identity, selfhood, consciousness, or subjective experience."


7. Neuroadaptive Conditioning

The neuroadaptive conditioner in cia.neuro.neuroadaptive_conditioning.NeuroadaptiveConditioner converts neural-state proxy estimates into control signals that modulate the CIA system's cognitive components. This is the core mechanism that creates the closed-loop neuroadaptive behavior.

Control Signal Generation

The convert_state_to_control_signal() method applies rule-based heuristics to map proxy estimates to a NeuroadaptiveControlSignal:

Neural State Control Signal Effect Mechanism
High fatigue (proxy > 0.7) Positive uncertainty_adjustment, negative attention_bias System becomes less decisive and reduces attention focus
Low fatigue (proxy < 0.3) Negative uncertainty_adjustment System becomes more decisive
High attention (proxy > 0.7) Positive attention_bias, positive workspace_priority_bias System focuses more on salient/goal-relevant content and increases workspace capacity
High workload (proxy > 0.7) Negative workspace_priority_bias System reduces workspace capacity to focus on fewer items
High prediction error (proxy > 0.7) Positive prediction_sensitivity_adjustment System increases learning rate to adapt faster to unexpected inputs

Threshold values: _HIGH_PROXY_THRESHOLD = 0.7, _LOW_PROXY_THRESHOLD = 0.3.

Component Conditioning

The conditioner applies control signals to four CIA components:

1. Attention Controller (apply_to_attention_controller): Adjusts attention weights based on attention_bias. A positive bias boosts salience and goal_relevance weights (and proportionally reduces uncertainty, novelty, welfare_relevance to maintain total ≈ 1.0). Original weights are saved for later restoration.

2. Global Workspace (apply_to_global_workspace): Adjusts workspace capacity based on workspace_priority_bias. A negative bias (high workload) reduces capacity to a minimum of 1 item. A positive bias (high attention) increases capacity.

3. Predictive World Model (apply_to_predictive_world_model): Adjusts the learning rate based on prediction_sensitivity_adjustment. A positive adjustment increases learning rate (clamped to [0.01, 0.99]), making the model more reactive to new observations.

4. Welfare Monitor (apply_to_valuation_or_welfare): Adjusts welfare monitor thresholds based on valuation_adjustment. A positive adjustment lowers thresholds (more sensitive), a negative adjustment raises them (less sensitive). This modulates how quickly the welfare monitor flags potential issues.

All adjustments are reversible. The conditioner stores original values before modification and provides restore_attention_controller_weights() for explicit restoration.

Integration with Theoretical Frameworks

The neuroadaptive conditioning mechanism draws on multiple consciousness theories:

Global Workspace Theory (GWT): The workspace capacity modulation directly implements GWT's principle that the workspace bottleneck controls how much information reaches global availability. When the participant shows high workload (via EEG proxies), the workspace narrows, reflecting a resource-limited processing state analogous to cognitive load effects on conscious access.

Attention Schema Theory (AST): The attention weight modulation implements AST's principle that the brain's model of attention determines processing priorities. When the participant shows high attention (via alpha dominance), the system's attention controller is biased toward salient and goal-relevant content — a computational analogue of enhanced attentional focus.

Predictive Processing (PP): The learning rate modulation implements PP's principle that prediction error drives belief updating. When the participant shows high prediction error (via gamma power), the system's predictive model becomes more sensitive to new observations — a computational analogue of increased prediction error signaling driving faster belief revision.


8. Integration with Consciousness Theories

The neuroadaptive extension is grounded in the same theoretical frameworks as the core CIA system, with EEG data providing an external measurement channel that informs the theoretical constructs.

8.1 Global Workspace Theory (Baars, Shanahan)

In GWT, consciousness is associated with the global broadcast of information across multiple specialized cognitive modules. The neuroadaptive extension modulates the workspace capacity based on the participant's measured workload. When workload is high, the workspace narrows — fewer content items compete for broadcast. When attention is high, the workspace expands. This implements the GWT principle that limited capacity constrains conscious access, using EEG-derived workload and attention proxies as the modulating signal.

8.2 Attention Schema Theory (Graziano, Webb)

AST proposes that the brain constructs a simplified model of its own attention process, and that this model is what we experience as consciousness of attention. The neuroadaptive extension modulates the attention controller's weight distribution based on the participant's measured attention level. When the EEG proxy indicates high attention, the system weights salience and goal relevance more heavily — a computational analogue of the attention schema becoming more precise and focused.

8.3 Predictive Processing / Active Inference (Friston, Clark)

Predictive processing frames perception as hypothesis testing: the brain continuously generates predictions and compares them against sensory input, minimizing prediction error. The neuroadaptive extension modulates the predictive world model's learning rate based on the participant's measured prediction error proxy (derived from gamma power). When gamma power is high (associated with prediction violation in the EEG literature), the system increases its learning rate — becoming more responsive to new observations. This implements the PP principle that prediction error drives belief updating.

8.4 Recurrent Processing Theory (Lamme)

Recurrent processing theory emphasizes the role of recurrent feedback loops in conscious processing. The neuroadaptive extension does not directly modulate recurrent processing cycles, but the feature extraction pipeline's spectral analysis captures oscillatory activity that reflects recurrent processing dynamics. Theta and alpha oscillations, in particular, are associated with long-range recurrent interactions in cortical networks.


9. Flow Diagram

The following diagram illustrates the full neuroadaptive EEG-CIA pipeline:

                         ┌──────────────────────┐
                         │   EEG Data Source    │
                         │  (CSV/JSON/NPY/BIDS) │
                         └──────────┬───────────┘
                                    │
                         ┌──────────▼───────────┐
                         │   EEG Ingestion      │
                         │  (windowing,         │
                         │   metadata extraction)│
                         └──────────┬───────────┘
                                    │
                         ┌──────────▼───────────┐
                         │   EEG Preprocessing   │
                         │  (detrend, normalize, │
                         │   bandpass, artifact) │
                         └──────────┬───────────┘
                                    │
                         ┌──────────▼───────────┐
                         │  Feature Extraction   │
                         │  (bandpowers, ratios, │
                         │   quality metrics)    │
                         └──────────┬───────────┘
                                    │
                         ┌──────────▼───────────┐
                         │  Neural State Encoder │
                         │  (attention, workload,│
                         │   fatigue, arousal,   │
                         │   prediction error)   │
                         └──────────┬───────────┘
                                    │
                         ┌──────────▼───────────┐
                         │  Subject Profile      │
                         │  (baseline calibration│
                         │   drift detection)    │
                         └──────────┬───────────┘
                                    │
                         ┌──────────▼───────────┐
                         │  Neuroadaptive        │
                         │  Conditioning         │
                         │  (control signals)    │
                         └────┬────┬────┬────┬───┘
                              │    │    │    │
              ┌───────────────┘    │    │    └───────────────┐
              │                    │    │                    │
    ┌─────────▼──────────┐ ┌──────▼──▼──────┐ ┌─────────────▼────────────┐
    │  Attention         │ │  Global        │ │  Predictive World Model   │
    │  Controller        │ │  Workspace     │ │  (learning rate)          │
    │  (weight bias)     │ │  (capacity)    │ │                           │
    └────────────────────┘ └───────────────┘ └───────────────────────────┘
              │                    │
              │    ┌───────────────┘
              │    │
    ┌─────────▼────▼──────┐
    │  Welfare Monitor    │
    │  (thresholds)       │
    └─────────────────────┘
              │
    ┌─────────▼────────────┐
    │  CIA Cognitive       │
    │  Cycle               │
    │  (with neuroadaptively
    │   conditioned        │
    │   parameters)        │
    └──────────────────────┘

Mermaid Alternative

flowchart TD
    EEG["EEG Data Source<br/>(CSV/JSON/NPY/BIDS)"] --> Ingest["EEG Ingestion<br/>(windowing)"]
    Ingest --> Preprocess["EEG Preprocessing<br/>(detrend, normalize, bandpass, artifact)"]
    Preprocess --> Features["Feature Extraction<br/>(bandpowers, ratios, quality)"]
    Features --> Encode["Neural State Encoder<br/>(attention, workload, fatigue, arousal, PE)"]
    Encode --> Profile["Subject Profile<br/>(baseline calibration, drift)"]
    Profile --> Condition["Neuroadaptive Conditioning<br/>(control signals)"]

    Condition --> Attn["Attention Controller<br/>(weight bias)"]
    Condition --> GW["Global Workspace<br/>(capacity)"]
    Condition --> PWM["Predictive World Model<br/>(learning rate)"]
    Condition --> WM["Welfare Monitor<br/>(thresholds)"]

    Attn --> Cycle["CIA Cognitive Cycle"]
    GW --> Cycle
    PWM --> Cycle
    WM --> Cycle

10. Limitations and Caveats

10.1 Proxies, Not Measurements

Every neural-state estimate produced by this pipeline is a proxy — a heuristic approximation derived from statistical features of the EEG signal. The proxies do not directly measure attention, workload, fatigue, arousal, or prediction error. They are based on well-known EEG correlates (e.g., theta/beta ratio and vigilance) but the relationships are probabilistic, noisy, and subject to significant individual variability.

10.2 Research-Grade, Not Clinical

The preprocessing pipeline uses simple, deterministic algorithms (linear detrending, z-score normalization, FFT-based bandpass) that are suitable for research prototyping but are not clinical-grade. The bandpass filter is explicitly documented as a placeholder that does not implement proper FIR/IIR design. For any application where signal fidelity is critical, use MNE-Python or scipy.signal for preprocessing.

10.3 Limited Channel Configurations

The feature extraction pipeline works with any number of channels, but the proxy heuristics are derived from EEG literature that typically uses full-cap (64+ channels) or reduced-montage (8-32 channels) recordings. Consumer EEG devices with very few channels (1-4) may produce noisier, less reliable proxy estimates. The signal quality metric partially compensates for this by reducing confidence when quality is poor.

10.4 No Real-Time Processing

The current pipeline is designed for offline processing — data is ingested from files, preprocessed, and analyzed after recording. Real-time or near-real-time processing would require integration with a streaming data source (e.g., Lab Streaming Layer, LSL) and a different windowing strategy. The OnlineSignalStream abstract base class and MockSignalStream provide the foundation for real-time integration, but real device adapters are a future extension.

10.5 No Machine Learning

The neural state encoder uses fixed, hand-crafted heuristic rules rather than machine-learning models. This is a deliberate design choice for transparency and reproducibility — every mapping rule is documented and deterministic. Machine-learning classifiers (e.g., trained on labeled EEG data) could potentially provide more accurate proxy estimates, but would introduce opacity, require training data, and raise additional ethical concerns about model interpretability.

10.6 No Consciousness Transfer

The neuroadaptive conditioning mechanism adjusts quantitative parameters of the CIA cognitive architecture based on EEG-derived proxy estimates. This parameter adjustment is a purely computational operation — it changes how the software processes information but does not transfer consciousness, identity, or subjective experience from the participant to the system. The system remains a software artifact processing statistical proxies.

10.7 Individual Variability

EEG features vary significantly across individuals due to differences in skull thickness, cortical folding, head size, age, gender, medication, caffeine intake, time of day, and many other factors. The subject profile and baseline calibration mechanism partially addresses this by adjusting proxy estimates relative to each individual's baseline, but significant inter-individual variability remains. Proxy estimates should never be compared across individuals without careful normalization.


References

Resource Citation / URL
OpenNeuro https://openneuro.org
BIDS / EEG-BIDS https://bids.neuroimaging.io
MNE-Python https://mne.tools
MNE-BIDS https://mne.tools/mne-bids/
Butlin et al. (2023) Butlin, C., et al. "Consciousness in Artificial Intelligence."
Butlin et al. (2025) Butlin, C., et al. "Identifying indicators of consciousness in AI systems."
Global Workspace Theory Baars, B.J. (2005); Shanahan & Baars (2005)
Attention Schema Theory Graziano & Webb (2015)
Predictive Processing Clark (2013); Friston (2010)
Recurrent Processing Theory Lamme (2006)