Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Specify different limit per pair in a multi-input multi-output neural network #146

Closed
caxelrud opened this issue Apr 8, 2024 · 12 comments
Closed

Comments

@caxelrud
Copy link

caxelrud commented Apr 8, 2024

Is it possible to specify different limit per pair in a multi-input multi-output neural network?

@nic-barbara
Copy link
Member

No, at the moment it's only possible to specify a global Lipschitz bound (or other IQC bounds) on the network which covers all the inputs/outputs together. It's definitely possible to put a bound on a subset of the inputs/outputs, we just haven't implemented it yet (and probably won't for a while).

Having said that, I believe @ruigangwang7 and @MrstupidJ were looking into this at some point?

@MrstupidJ
Copy link
Contributor

Our work was slightly different.
I guess you can use multiple networks in parallel to achieve different Lipschitz bound per pair, but this ignores that some inputs and outputs could be coupled.

@imanchester
Copy link
Contributor

What is meant by "per pair" here? Input 1 to output 1, input 2 to output 2, etc? Or all n*m possible pairs (with n inputs and m outputs)?

@caxelrud
Copy link
Author

"Per pair" means what you described. It is input1 to output1, input2 to output1, ...
It is ok (practical) to to have MISO system.
This allows to constraint the sensitivity (gains) per pair. As I described, data may have "defects" that distort the model, most related to correlation in the inputs. The obtained model is not Causal and can't be used for prescription applications.
A constraint model (knowledge informed) can be used for model based controller as MPC.

@nic-barbara
Copy link
Member

@caxelrud let me know if you'd like to continue the discussion elsewhere (eg: feel free to email me). I'm closing this issue since there's no changes required to the package.

@caxelrud
Copy link
Author

caxelrud commented Aug 13, 2024 via email

@caxelrud
Copy link
Author

caxelrud commented Aug 14, 2024 via email

@caxelrud
Copy link
Author

caxelrud commented Aug 14, 2024 via email

@nic-barbara
Copy link
Member

Hi @caxelrud, I'm still not sure I quite understand what you mean. Do you mean that if we have a model u = model(x), you want to be able to constrain the slope of the model between (for example) [9.0, 11.0], rather than choosing a Lipschtiz bound of 1.0 so that the slope is between [-1.0, 1.0]?

@caxelrud
Copy link
Author

caxelrud commented Aug 14, 2024 via email

@nic-barbara
Copy link
Member

It sounds like what you actually want here are monotone and bi-Lipschitz models. I.e: models that have both an upper and lower bound on the gain, and have a slope that is only ever positive (for example).

We currently don't have any models like that in this repository, but our group has been working on highly related ideas (eg: see this paper, and the corresponding git repo).

It would be great to include networks like this in RobustNeuralNetworks.jl but unfortunately I don't have the bandwidth to add them at the moment. Feel free to give it a go and submit a PR if you're interested!

@caxelrud
Copy link
Author

caxelrud commented Aug 15, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants