Post

HN
Hacker News

Could a computer scientist build a brain?

Ranked #7 on Hacker News with 70 points and 44 comments.

How does a brain wire itself, starting from a single cell, using only the information encoded in a genome? We pose this as an engineering problem: Write a program that a single cell executes to build itself into a brain. The program must be small enough to fit in a genome, and fast enough to finish within developmental time. A computer scientist who knows little about biology quickly realizes why the obvious strategies, which developmental biology has rejected experimentally, fail at scale: The genome is too small to store per-synapse wiring, and axons searching blindly for targets would take too long. These same algorithmic constraints drive the design toward solutions that resemble the developmental strategies organisms actually use. That the same solution structure falls out of scaling limits as out of evolution suggests that features of neural development can be grounded in computational necessity rather than contingency alone. Where earlier thought experiments reached discouraging conclusions about the ability of a biologist to fix a radio 1 , or to understand a microprocessor 2 , the news here is better: The design of the brain may be recoverable, not from taking it apart, but from asking how a genome must specify it in the first place.

Suppose we hand a computer scientist the complete wiring diagram of a brain and ask: Write a program that a single cell executes to elaborate itself into this network. The program must fit in a genome-sized instruction set of about 1 gigabyte, and it must halt within a developmental time window of at most about a year. The challenge is that the algorithm must scale: It should work for the 302 neurons of C. elegans , the 10 5 10^{5} 1 0 5 neurons of a fly, the 10 8 10^{8} 1 0 8 neurons of a mouse 3 , and the 10 10 10^{10} 1 0 10 neurons of a human brain 4 (Fig. 1 ). How would someone with no knowledge of developmental biology approach this problem?

The computer scientist is, in effect, formalizing a task in the spirit of Turing 5 , von Neumann 6 , Waddington 7 , and Brenner 8 , who all saw the genome as a set of instructions for making an organism rather than a description of one. Formalizing the task helps to identify the algorithmic strategies that are both feasible and tractable. Working through the exercise, we find that strategies that work for a small nervous system hit hard walls as the network grows, and the constraints narrow the field to a small class of solutions. The convergence between theory and experiment informs both directions. For developmental neuroscientists, it formalizes familiar molecular mechanisms as solutions to a well-defined algorithmic problem and picks out which features of those mechanisms are computational necessities and which are free to vary. For theorists, it presents biological development as a system that solves an as-yet-unsolved computational task. Modern machine learning does not yet know how to generate large functional networks from compact descriptions, relying instead on either a large stored weight matrix copied from disk, or a training set that is orders of magnitude larger 9 . The initial zygote contains exactly such a description, and analyzing the developmental process may help inspire new algorithms for artificial systems.

What does it mean to write a developmental program 10 – 14 ? The computer scientist does not get to place neurons and wire them up from the outside, like an engineer soldering a circuit board. Instead, she must write a set of instructions that go into a single initial cell, and then she walks away. This initial cell divides, and each daughter inherits the same program and runs it independently. Each instance of the program can read only what it can sense locally: its own internal state along with molecular signals from its neighbor cells that are themselves running the same program. The cell performs actions that will build the brain: It divides, migrates, extends growth cones that navigate by reading molecular cues and form synapses upon arrival. The entire construction process is distributed and recursive, since every signal a cell reads was produced by another cell executing the same code. The programmer's sole lever is the instruction set she loads into the genome at the start, along with the cell's initial state.

The program needs to yield the correct network while respecting practical constraints. We focus here on two aspects: It needs to be short enough to fit in the genome and finish in a reasonable amount of time. A human brain has n ≈ 10 10 n{\approx}10^{10} n ≈ 1 0 10 neurons, each of which forms connections with as many as m ≈ 10 4 m{\approx}10^{4} m ≈ 1 0 4 targets 15 , for a total of as many as n × m ≈ 10 14 n \times m\approx10^{14} n × m ≈ 1 0 14 connections.

The program must satisfy two hard constraints.