The most important thing is to figure out what you want to achieve. Banal, easier said than done, but always important to keep in mind. Your goals and understanding of them are likely to change, but having more understanding is always better than having less. This understanding can only be gained through practice, and is personal to you, which makes it hard to give specific advice.
CS is not really a field that can be mastered as a skill. The skill sets of people developing web services, games, robots, programming languages, hardware architectures, and software that runs on space shuttles will be somewhat different. There are also purely theoretical and mathematical aspects: algorithms and data structures, type theory, formalized logics, etc, etc. All of those have their own resources and communities.
There are some general things that would be good to know for anyone working on anything CS-related. Check out a few computer science courses in big universities, and the things they all teach in first and second years would be the most universal ones.
As for the practical stuff you can do right now: for engineering aspect, I would recommend picking a simple project (website/app/game) and implementing it end-to-end using best practices you can find for everything: code style, testing, repo, CI/CD, and so on. For theoretical aspect you can check out Project Euler and see how far you can go in solving the challenges on there.
I see the issue in fixing the errors automatically in that "fixing the error" is another aspect of "changing the behavior of the program" (even on the syntactic level: how would you fix a line "x = (2+3-4*5;"?), and we likely don’t want random changes to this behavior to happen. The article says that for self-healing of code to work, you need to have a full specification of what it should do, e.g. in the form of test cases that check for every scenario. But if you cover every possible scenario in your test cases, then how can a program have an error to fix to begin with?
If such tests have been written, then writing a program satisfying all of them is definitely a solvable problem. But now the entire complexity of writing good code turns into complexity of writing good tests.
I think that generally people are interested in being as intelligent as possible. The institutes of school and university, the study of pedagogy and science in general are all dedicated to this.
The reason why people generally don’t strive to have supernormal abilities such as super memory is because these are not strictly needed. Instead of memorizing everything we can write it all down.
Some abilities are much more useful, but we don’t know what makes them appear. Neuroscience and psychology are studying the underlying mechanisms for those. These topics are just very hard to understand, and would be much harder to reliably implement in practice. For example, we understand a lot more about how muscles work than how brains work, yet most we can do to affect our strength reliably is better nutrition and exercise programs. And until we find a way to make everyone run ultra-fast without impeding other positive qualities, a bicycle would be preferred to running very fast.
If the improvement in human intelligence could only be done mechanically (i.e. by making the brain work faster or store more stuff more precisely), the sciences about human mind would be the only sciences that improve human intelligence. However, all sciences work on this. A person who studied Newtonian mechanics would be "superintelligent" in reasoning about motion of rigid bodies compared to people who don’t know about it. Being able to masterfully solve hard equations is not be as useful to humanity as a whole as devising formulas to make solving these equations easier for everyone, and computing machines to let them be solved automatically.
The entire economy will be based on blockchain currencies and NFTs. I know it was supposed to happen last year, but we just need to wait a little more...
The biological neural structures that encode behavior are “trained” through evolution, but even the most advanced animals rely mostly on conditioned (= learned during lifetime) reflexes, and not on the ones “hardcoded” evolutionary.
Certainly not much evolutionary “training” in the human brain has happened in the last 3000 years, yet advancement in our understanding of the world has been plentiful. But human thinking (including rationality, mathematics, etc.) is on a different level to even learned animalistic behavior. Some great apes were taught language and even showed basic abstract conceptual thinking, but were never able to reach the level of 3-5 years old human kids.
The problem with GPTs and other statistical models is that they can learn incredibly complex patterns in anything we can express as bytes, but not learn the simplest concepts of maths despite being trained on the whole corpus of mathematical texts available on the internet, while kids need classes that can be covered in a single textbook to understand them, and adults may need just a textbook for this.
The claim about those models being "statistical". Why wouldn't you consider human brain to be statistical or animal's brains as "statistical"?
Because in the end human brains as well as any brains it seems they could be thought of statistical results from long periods of training and producing output from input. Where am I wrong?
I assume by statistical you mean that the ending result of state of neurons can be represented as numbers and pathways leading through these as probabilities of going through a certain pathway - but it occurs to me that same is with human brain, no?
You are not wrong, but too abstract. Saying that brain is statistical and therefore can be represented with statistical model such as artificial neural net is like saying that brain is computational and therefore can be represented with a Turing-complete system, or that brain is physical and can be represented via physical simulation, etc.
>Imagine how fast you could think if you had a mentally stable whiteboard that you could perceive as clearly as you can see, and update as fast as you can think the changes.
Thinking about what I am going to draw or write on the whiteboard takes the bulk of time, not the act of drawing or writing. The "update as fast as you can think" part will likely be achieved soon with neural interface, yet it's hard to imagine that this will lead to "superintelligence" of some sort. Same for "mental file cabinets": real or digital files allow to trivially store information, and search systems allow to retrieve it pretty quickly, yet somehow Google didn't make everyone who can use it super smart.
Same goes for vocal speed: coming up with the words to describe the idea and coming up with the idea itself are different things, second being much more hard.
> At this point, IMHO, anyone pessimistic about AI has expectations far behind the exponential curve we are in.
The problem is that the crucial aspect of reasoning is missing in the state of the art models right now. We can make LLMs write to and read from files, but as long as there is a chance that any of its output will be incoherent (and there's a good of this chance now) and there is no mechanism to actually check for errors logically, the whole whiteboard architecture will be a huge demonstration of "garbage in, garbage out".
Our minds do operates internally much faster than our mouths or fingers.
The speed we go from thought to thought internally is lighting, compared to how fast we operate when we have to update the subjects of these thoughts on pen and paper. Or explain every step of our thinking, as we make it, to someone else verbally.
Our brain is far more densly connected and faster operating than brain signals sent to direct a physical arm and hand, pen, paper, back through the visual system.
Being able to adjust any stable visualization in the mind by just visualizing the change to instant effect, removes mental friction and increases internal bandwidth.
Any removal of friction or increased bandwidth to thinking is profound.
Slowed more careful thinking, and slower collaborative thinking, are often helpful. But being slowed down by limitations is never a help.
They are "capable", but only by chance. If you generate millions of random sentences in a human language then some of them would express some "useful new solutions". LLMs would have a higher chance of this happening as they generate sentences that are statistically more probable and therefore more likely to represent a coherent thought, but this would still be a chance.
The good thing is, you will probably remember that one good one and forget about unsuccessful generations; just like how a gambler will only remember that one time he won something, and never talk about most of the time he lost.
The same is usually true for "human" inventors. I mean not forgetting or gambling, but having many unsuccessful attempts with probably a single good outcome. Recently read "Reinventing the wheel" by Steve Kemper (also known as "Code name Ginger" about Segway development), the funny term for this from Kamen himself was "frog kissing".
Yes; categories extend traditional graphs with systems of equations. Hypergraphs extend traditional graphs by allowing edges to be between multiple nodes. Most operations on categories are formally undecidable because of the systems of equations; most operations on graphs/hypergraphs are decidable. This makes working with categorical databases a lot like doing computer algebra in e.g. Mathematica and provides a huge increase in expressive power (you can e.g. encode Turing machines with equations.)
Yeah, the "logical reasoning" in LLMs is mostly a marketing device to get products sold and papers published. One could hope that starting with reasoning instead of trying to get it "emerge" would do a better job. But if we have little idea of how abstract thinking actually works, this is a problem. What do you think about current logic-based AI approaches? Do they try to replicate the best ideas we've got from congnitive sciences, or trying to do their job for them?
> One could hope that starting with reasoning instead of trying to get it "emerge" would do a better job.
We did AI starting with reasoning (directly implementing rules of propositional logic) first, it is called expert systems.
It works very well for some things, but after some efforts to expand it with things like fuzzy logic it became pretty much accepted that we'd reached its limit.
There's a distinction between "constrain the AI's output with logical rules to make it more reliable" and "build logical reasoning into the AI." The current strategies are trying to do the first task and I bet it'll lead to all sorts of cool technology. I strongly doubt these techniques will extend to the actual logical reasoning. Intuitively, it feels like throwing a bunch of logical rules onto AI is begging the question - I doubt bird/mammal brains actually have these logical rules baked in, I am sure it's far more sophisticated.
A trivial theorem in logic gives an example of what I mean:
If A then B <=> If (not B) then (not A)
This is really not how humans think - I don't believe we have a "contrapositive calculator" in our brain that takes arbitrary situations in and computes a contrapositive. This contrapositive theorem is a fact of the world that humans used logical thinking to understand, and which can be applied to formal logical computations that human brains aren't necessarily good at.
Specifically, I don't think non-human animals have "logical" thinking at all, they have causal thinking, and human logic is a consequence of us having exceptionally good understanding of causality. Logic is itself a special case of causality, formalized in a "generic" fashion by human language and used as a tool to help us think through tricky cases.
The contrapositive theorem takes a bit of thought for me to unwind - "so if B is not true then of course A can't be true" - but the way contrapositives are reflected in the real world takes no thought whatsoever, even if the examples are more algebraically complicated than A->B <=> (~B)->(~A):
- if the door is working and I have a key that can unlock the door, then if I can't unlock the door either I don't have the key or the door is broken. (AvB)->C <=> (~C)->(~A ^ ~B)
- if having gas implies my car can drive, then if my car can't drive I don't have gas - or possibly I was incorrect and my car is broken. (A->B <=> (~B)->(~A)) V (~)(A->B)
These cases are obvious to us because the brain has access to much fancier causal reasoning than what we can currently express in human language. For now, human language is stuck with "If a then not b" stuff. I don't think feeding this limited human language into a computer is going to burst past these limits. We need to figure out how bird/mammal brains actually model things causally.
> These cases are obvious to us because the brain has access to much fancier causal reasoning than what we can currently express in human language. For now, human language is stuck with "If a then not b" stuff.
I don't follow this. Didn't you just express these cases in human language? I understand that in reality we can "grasp" the meaning of a problem of not being able to open the door without expressing or thinking about it verbally, which would be redundant as there would be a lot to say (the key may be broken, the door may be held by someone on the other side, even if the key works we might be trying to push instead of pull, etc, etc.) and any person who has opened doors with keys would likely understand all of this. The problem is not that those things can't be expressed in human language, but the lack of ability to build good conceptual models of the world that encompasses all such knowledge and allows reasoning on it quickly.
I didn't mean the specific cases, I meant the underlying mechanism that our brain uses to reason about these cases. There is something deeper going on that allows us to build rigorous world models from very thin abstractions, which can be applied to a seemingly arbitrary range of problems. It's this rigorous world model which is absent in AI and not currently explained by cognitive science.
In this example, the overall world model is able to easily accommodate "broken door" "functioning door" "key" etc. and come to a specific conclusion about this problem. The specific conclusion can be easily expressed in human language. The world model itself can't.
Thanks, modern rule engines and description logic formalisations are something for me to explore! Are there any other practical applications of such advanced SAT solvers?
CS is not really a field that can be mastered as a skill. The skill sets of people developing web services, games, robots, programming languages, hardware architectures, and software that runs on space shuttles will be somewhat different. There are also purely theoretical and mathematical aspects: algorithms and data structures, type theory, formalized logics, etc, etc. All of those have their own resources and communities.
There are some general things that would be good to know for anyone working on anything CS-related. Check out a few computer science courses in big universities, and the things they all teach in first and second years would be the most universal ones.
As for the practical stuff you can do right now: for engineering aspect, I would recommend picking a simple project (website/app/game) and implementing it end-to-end using best practices you can find for everything: code style, testing, repo, CI/CD, and so on. For theoretical aspect you can check out Project Euler and see how far you can go in solving the challenges on there.
And I wish you best of luck on your quest.