I want to share an idea about how we could try to force a neural network to come with bigger and bigger generalizations. Potentially reaching abstractions similar to human abstractions.

Disclaimer: I'm not an expert. 

In general

Here's the general idea of the required learning procedure:

  1. Find a feature that classifies an object.
  2. Generalize this feature so it fits all the objects.
  3. Make different versions of this feature that classifies different objects. (1st iteration)
  4. Generalize lower-level features from which the previous features were constructed.
  5. Make different versions of those lower-level features for different higher-level features... (2nd iteration)

Example

Let's say our goal is to learn the visual difference between cars and poodles (a dog breed). We're looking only at pictures of cars and poodles, nothing else.

As I understand (judging by the definition and some illustrations I've seen), a typical deep learning model may approach the problem this way:

  1. It learns what is a "wheel". (I know that the model is unlikely to learn a human concept.)
  2. It learns that cars have wheels and poodles don't have wheels.
  3. You show it a poodle on wheels and it needs to relearn everything from scratch. The new data completely destroyed the previous idea of what's a car and what's a poodle.

Note: of course, it doesn't have to learn about the "wheel", it can learn any other low-level feature (or combination of features). It's just an example.

But I thought about another idea, a different model:

  1. It learns what is a "wheel".
  2. It learns that cars have wheels and poodles don't have wheels.
  3. It generalizes the definition of a "wheel" as "anything like a circle" so it can describe both cars and poodles. Cars have round wheels and poodles have round fur.
  4. It learns to tell apart "car circles" from "poodle circles". It learns that car's circles are separate and poodle's circles are connected. (a poodle looks like many circles joined together)
  5. You show it a poodle on wheels... and it doesn't fall for the trick. Or quickly adapts. The important point is that it still has all the tools to solve the problem. The ideas it learned didn't become meaningless.
  6. And it can go deeper. The same way it can generalize the definition of "being connected" (learned on the step 4) and then create 2 versions of this definition for cars and poodles. It can learn that even if car's circles are connected, they're still distinct circles, but poodle's circles are not distinct. After that it won't fall for the trick even if you show it a weird car that has more than 4 wheels.

Does this idea make sense? Does this idea exist in ML in any way, shape or form?

I thought this idea might be interesting because it's like an analogue of backpropagation, but on a conceptual level: instead of updating layers of neurons we're updating layers of concepts (features) themselves.

I think there should be some connection to the DeepDream idea. Because if a network learned to recognize wheels, it could turn a poodle into many wheels melted together (after being run in reverse multiple times). I think DeepDream images can reveal some additional information about the features a network learns. Maybe we could use this information to make the network understands the features better. For example, if a network learns how to tell apart cars from clouds, learning how to tell apart cars from "clouds turned into cars" could teach the network that cars should normally be on the streets and not flying in the sky. And not be gigantic, not have a vague shape, etc. (Well, I already wrote a similar example.)

Using DeepDream

Has anybody tried to use DeepDream images to train a neural network to understand images better? Here's an example of how you could try to do this: (it's only an outline of the method)

  1. You make a dataset (A) with pictures of cars and dogs. A neural network learns to distinguish cars from dogs.
  2. You create a copy of the dataset (B). You modify the pictures by running the network in reverse, creating DeepDream images. Now cars look more like dogs and dogs look more like cars.
  3. The neural network learns to distinguish cars from dogs in both datasets. (After that the 1st iteration is over. You can stop or continue.)
  4. You create a third dataset (C). Modify the pictures by running the network (that solves A and B datasets) in reverse again.
  5. The neural network learns to distinguish cars from dogs in all three datasets.(After that the 2nd iteration is over. You can stop or continue.)

You're doing a form of bootstrapping. Or something similar to GAN.

A discussion on Reddit, No Participation link: "Has anybody tried to use DeepDream images to train a neural network?".

Thoughts

Maybe if you forced a network to look at a DeepDream image and figure out what the original image was about (what elements still make sense and what are just random artifacts), it could learn some deeper concepts?

In the perfect scenario the network learns very abstract features in order to make sense of "weird" images. For example, it may learn that a real dog should have only 1 normal head, not 10 heads that are melted together (a thing that you can witness in some DeepDream images).

Some DeepDream images are simply fascinating to me. The DeepDream process is effectively creating analogies (e.g. "clouds may look somewhat like dogs"). So why don't try to learn something about the world through those analogies? I guess one could come up with various ways to estimate what "analogies" make more sense than others (and in which way) and use it for training. That's one of the reasons I'm curios about the idea I described in this post.

Paper

Wikipedia mentions that at least in some way DeepDream images are indeed used in learning:

While dreaming is most often used for visualizing networks or producing computer art, it has recently been proposed that adding "dreamed" inputs to the training set can improve training times for abstractions in Computer Science.[18]

The paper: https://arxiv.org/abs/1511.05653.

Is it similar to what I described? (I can't understand the paper.)

CycleGANs

There's also CycleGANs (didn't find much about them on Wikipedia, so here's a Numberphile video) and maybe they're more similar to what I'm describing: a CycleGAN can learn to transform a picture of a horse into a picture of a zebra... and then to transform this generated picture of a zebra back into the original picture of a horse.

Iterated Distillation and Amplification

There's also Iterated Distillation and Amplification method (IDA).

"AlphaGo Zero and capability amplification" (video by Robert Miles)

In the simplest form of iterated capability amplification, we train one function:

A “weak” policy A, which is trained to predict what the agent will eventually decide to do in a given situation.

Just like AlphaGo doesn’t use the prior p directly to pick moves, we don’t use the weak policy A directly to pick actions. Instead, we use a capability amplification scheme: we call A many times in order to produce more intelligent judgments. We train A to bypass this expensive amplification process and directly make intelligent decisions. As A improves, the amplified policy becomes more powerful, and A chases this moving target.

In IDA we try to squeeze contents of a more complicated thing into a simpler thing.

It's not the same idea compared to what I described because it doesn't have to work on the level of learning features. However, both ideas may turn out to be identical in practice, depending on how you implement IDA. So, I'm curious, was IDA tried in image recognition?

Inspiration

The idea was inspired by my experience. And by a philosophical idea: what if any property is like a spectrum and different objects have different "colors" of properties?

People often can feel different flavors of meaning and emotions and experiences... My idea above is an attempt to apply this to image recognition.

New to LessWrong?

New Comment
10 comments, sorted by Click to highlight new comments since: Today at 2:51 PM

This suggestion doesn't really make sense as is; It might be fixable, but I would suggest implementing a few neural training algorithms from scratch in either code with no libraries, or a simple library like numpy that does not provide built in backprop. there are also a lot of great videos that introduce the basics of neural networks on YouTube. here are some of my favorites from my intro to ml playlists, I've got a lot more channel recommendations in my shortform (there's some redundancy between these videos, so maybe watch them on different days)

overviews of the intuition for NNs:

overviews of the math starting at zero:

  • https://youtu.be/aircAruvnKk - "but what is a neural network?", 11M views, 20min - first video in a very beginner focused series by 3b1b
  • https://youtu.be/VMj-3S1tku0 - "The spelled out intro to neural networks and backpropagation: building micrograd", 130k views, 2 hours 25 minutes - fantastic intro by karpathy, a well-known deep learning researcher
  • https://youtu.be/PaCmpygFfXo - The spelled out intro to language modeling: building makemore", 18k views, 2 hours - also by karpathy

I share these in the hope that they turn out to be relevant to your level, but if I guessed wrong about what level to suggest, or if you simply learn better from other kinds of media besides videos, that feedback would be welcome and useful for my learning. many of these folks I am recommending also have videos on other advanced technical topics, btw.

Please, don't write offtopic. I'm not an expert, but I have my reasons to suggest this idea.

Keep in mind:

  • I discussed this idea at least with some people before.
  • You could understand this idea outside of the context of neural networks.

This suggestion doesn't really make sense as is; It might be fixable

What things don't make sense to you/have unclear motivation?

I've seen 3b1b series (among other things).

  1. It learns what is a "wheel". (I know that the model is unlikely to learn a human concept.)
  2. It learns that cars have wheels and poodles don't have wheels.
  3. You show it a poodle on wheels and it needs to relearn everything from scratch. The new data completely destroyed the previous idea of what's a car and what's a poodle.

This is wrong; I don't know how to fix it in english. It would learn all of those things smoothly-ish in parallel; this is why I suggest watching several different training animations to get a sense of what a training process looks like in my previous post. Another resource I should have mentioned is the comparison of weights in Nanda's recent work on grokking - the tweet summary is likely good enough given that we're not focused here on the core of the paper: https://twitter.com/NeelNanda5/status/1559060507524403200 (full lesswrong post: https://www.lesswrong.com/posts/N6WM6hs7RQMKDhYjB/a-mechanistic-interpretability-analysis-of-grokking )

It sounds like you're trying to come up with domain generalization methods, and you're thinking in terms of doing so using adversarial training; I would suggest popping open semantic scholar and searching for out-of-distribution, domain generalization, adversarial training, and any other keywords that pop up. Then, skim some papers; even a very experienced researcher usually doesn't understand most papers on a quick skim, but it gives context as to which methods seem to work. Once you've gotten a sense for results they had, read closer to find the math; spend some time staring at the math being confused, then make a shortform post to try to figure out what they're talking about. When inevitably that isn't enough, try to invent their method from memory, and look up the math that you remember on a few platforms - especially wikipedia and youtube, but there are a few other search engines that are good for understanding math, especially kagi and teclis, which are better at finding small-time websites than google and ddg - and try to figure it out. English typically underspecifies the math by a fairly large margin.

To be clear - your english ideas here aren't totally barking up the wrong tree. It's not that your idea is fundamentally bad or anything! My point in commenting with a bunch of resources isn't to say you cannot figure out a workable version of this insight, my point is that you are effectively on an early step of figuring out how to precisely specify your idea, and it won't be worth others' time to use your idea until it becomes at least a reasonable summary of the current state of the research or a clear specification of how to go a different direction. eg, are you thinking of learning to learn, perhaps?

Thank you for taking the time to answer. But I think this is an irrational attitude. Not yours specifically, but in general it's an irrational tradition of analyzing ideas and proposals. It's incompatible with rational analysis of evidence and possibilities. (I wrote a post about this.)

my point is that you are effectively on an early step of figuring out how to precisely specify your idea, and it won't be worth others' time to use your idea until it becomes at least a reasonable summary of the current state of the research or a clear specification of how to go a different direction.

Imagine that one day you suddenly got personal evidence about the way your brain learns. You "saw" the learning process of your brain. Not on the lowest level, but still, you saw a lot of things that you didn't know were true or didn't even imagine as a possibility.

  • Did you gain any information?
  • If you saw some missed possibilities, can you explain them to other people?
  • Are you more likely to find a way to "go in a different direction" in your research than before?

If "yes", then what stops us from discussing ideas not formulated in math? Neural nets aren't a thing disconnected from reality, they try to model learning and you should be able to discuss what "learning" means and how it can happen outside of math. (I mean, if you want you can analyze neural nets as pure math with 0 connection to reality.)

If even professional researchers can't easily understand the papers, it means they don't have high level ideas about "learning"[1]. So it's strange to encounter a rare high level idea and say that it's not worth anyone's time if it's not math. Maybe it's worth your time because it's not math. Maybe you just rejected thinking about a single high level idea you know about abstract learning.

My idea is applicable to human learning too. You also could imagine situations/objects for which this way of learning is the best one. (A thought experiment that could help you to understand the idea. But you don't let me to argue with you or to explain anything.)

This is wrong; I don't know how to fix it in english. It would learn all of those things smoothly-ish in parallel; this is why I suggest watching several different training animations to get a sense of what a training process looks like in my previous post.

Likely it doesn't affect the point of my post. It's just a nitpick. (I watched Grant's series, I watched some animations you linked.)

  1. ^

    I don't mean any disrespect here. Just saying they have no other context to work with.

If even professional researchers can't easily understand the papers, it means they don't have high level ideas about "learning"[1]. So it's strange to encounter a rare high level idea and say that it's not worth anyone's time if it's not math. Maybe it's worth your time because it's not math. Maybe you just rejected thinking about a single high level idea you know about abstract learning.

This will be my last comment on this post, but for what it's worth, math vs not-math is primarily a question of vagueness. Your english description is too vague to turn into useful math. Precise math can describe reality incredibly well, if it's actually the correct model. Being able to understand the fuzzy version of precise math is in fact useful, you aren't wrong, and I don't think your sense that intuitive reasoning can be useful is wrong. Your idea here, however, seems to underspecify which math it describes, and to the degree I can see ways to convert it into math, it appears to describe math which is false. The difficulty of understanding papers isn't because they don't understand learning, it's simply because writing understandable scientific papers is really hard and most papers do a bad job explaining themselves. (it's fair to say they don't understand it as well as they ideally would, of course.)

I agree that good use of vague ideas is important, but someone else here recently made the point that a lot of what needs to be done to use vague ideas well is to be good at figuring out which vague ideas are not promising and skip focusing on them. Unfortunately, vagueness makes it hard to avoid accidentally paying too much attention to less-promising ideas, and it makes it hard to avoid accidentally paying too little attention to highly-promising ideas.

In machine learning, it is very often the case that someone tried an idea before you thought of it, but tried it poorly and their version can be improved. If you want to make an impact on the field, I'd strongly suggest finding ways to rephrase this idea so that it is more precise; again, my problem with it is that it underspecifies the math severely and in order to make use of your idea I would have to go myself read those papers I suggest you go look at.

I agree that good use of vague ideas is important, but someone else here recently made the point that a lot of what needs to be done to use vague ideas well is to be good at figuring out which vague ideas are not promising and skip focusing on them.

I don't think there's a lot of high level ideas about learning. So I don't see a problem of choosing between ideas. Note that "vague idea about neural nets' math" and "(vague) idea about learning" are two different things.

again, my problem with it is that it underspecifies the math severely and in order to make use of your idea I would have to go myself read those papers I suggest you go look at.

Maybe if you tried to discuss the idea I could change your opinion.

Your idea here, however, seems to underspecify which math it describes, and to the degree I can see ways to convert it into math, it appears to describe math which is false.

That would mean that my idea is wrong on non-math level too and you could explain why (or at least explain why you can't explain). I feel that you don't think in terms of levels of the problem and the way they correspond.

Your english description is too vague to turn into useful math.

I don't think "vagueness" is even a meaningful concept. An idea may be identical to other ideas or unclear, but not "vague". If you see that an idea is different from some other idea and you understand what the idea says (about anything), then it's already specific enough. Maybe you jump into neural nets math too early.

I think you can turn my idea into precise enough statements not tied to math of neural nets. Then you can see what implications the idea has for neural nets.

Just a quick comment: don't use Wikipedia for machine learning topics. Unlike using it for e.g. some math topics, it's very outdated and full of poorly written articles. Instead, the intro sections of ML papers or review papers that you can find through Google Scholar are usually quite readable.

It has been improved significantly in the past few years, but it does still tend to lag the papers themselves.

I think even that is overstating how useful it. For example, I think we can all agree that regularization is a huge and very important topic in ML for years. Here is the Wiki entry: https://en.wikipedia.org/wiki/Regularization_(mathematics)#Other_uses_of_regularization_in_statistics_and_machine_learning .  Or interpretability: https://en.wikipedia.org/wiki/Explainable_artificial_intelligence . Things like layer normalization are not even mentioned anywhere. Pretty useless for learning about neural nets. 

yeah, fair enough.