Skip to content

Regarding duplicated queries in the Square Attack #2307

Open
@Lodour

Description

@Lodour

Is your feature request related to a problem? Please describe.
I was benchmarking the performance of some black-box attacks and noticed that the Square Attack issued about 50% duplicated queries. This occurs because most queries are sent twice in a subtle way; see the code below.

Describe the solution you'd like
Update the implementation to reuse the last prediction outputs.

I am happy to send a PR if you find this performance improvement useful.

Describe alternatives you've considered
N/A

Additional context
For example, x_adv is passed to self.estimator.predict at L347, and its subset x_robust = x_adv[sample_is_robust] is immediately passed to self.loss, which boils down to a duplicated call of self.estimator.predict on the same inputs.

# Determine correctly predicted samples
y_pred = self.estimator.predict(x_adv, batch_size=self.batch_size)
sample_is_robust = np.logical_not(self.adv_criterion(y_pred, y))
if np.sum(sample_is_robust) == 0: # pragma: no cover
break
x_robust = x_adv[sample_is_robust]
x_init = x[sample_is_robust]
y_robust = y[sample_is_robust]
sample_loss_init = self.loss(x_robust, y_robust)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions